2013-06-05 1 views
3

웹 서버에 액세스 할 수없고 요청을 차단 한 다음 http에서 https로 리디렉션하는 유일한 방법은 리디렉션하는 가장 좋은 방법은 무엇입니까?피라미드에서는 http에서 https로 어떻게 리디렉션 할 수 있습니까?

나는 NewRequest를 사용하여 구독자를 보았다. 그래서 같은 것을했다 :

@subscriber(NewRequest) 
def modify_protocol(event): 
    if re.search('some string', event.request.host_url): 
     event.request.scheme = 'https' 

그러나,이 내가 무엇을 기대하지 않았다. 페이지가 아직 렌더링 중입니다. 어떤 아이디어라도 감사 할 것입니다.

미리 감사드립니다.

답변

0

일부 자발적인 조언 - 비 SSL로부터 SSL로 리디렉션하지 마십시오.

보안 문제가 있습니다. 기본적으로 다른 사람이 SSL을 사용하지 않는 Man-In-The-Middle 서비스를 관리하는 경우이를 다른 서버의 유효한 인증서로 실행되는 SSL 서비스로 리디렉션 할 수 있습니다. 사용자는이를 알지 못할 수도 있습니다.

사용자에게 경고하고 클릭 할 수있는 일반 텍스트 링크를 제공하는 페이지를 제공하는 것이 좋습니다. 뷰 내부

+0

http 페이지의 좋은 조언이지만 https 링크는 리디렉션과 마찬가지로 쉽게 손상됩니다. – imsky

+0

어. 적어도 사용자는 SSL을 사용하지 않았으며 URL을 클릭해야한다는 사실을 충분히 이해하고 있습니다. 명시 적으로 명시된 URL을 클릭 할 때마다 항상 URL 표시 줄을 두 번 확인합니다. 내가 마술처럼 움직이면 나는 브라우징을 계속한다. 차라리 약간의 피드백을 받고, 자동 리디렉션되고 기회를 제공받지 않는 것보다 약간의 다리를 닦을 것입니다. 중간 관리자 또는 "자바 스크립트"녀석이 사용자의 사용 편의성에 대한 논쟁을 불러 일으킬 수는 있지만 안전한 웹 사이트는 MITM을받는 고객보다 낫습니다. – synthesizerpatel

+0

나는 너와 함께하지만, 보안되지 않은 페이지에서 텍스트를 대체 할 수 있으므로 사용자에게 알리지 않고 MITM 공격의 위협이있다. 예를 들어 평문 링크도 보이지 않는다. HSTS는 우리가 지금까지 가지고있는 최고 중 하나입니다. 왜냐하면 http는 항상 오픈 벡터가 될 것이기 때문에 OWASP는 리디렉션에 대한 추천을 포기했습니다. – imsky

7

: 이벤트 리스너를 사용

if req.scheme == "http": 
     return HTTPFound("https://" + req.host + req.path_qs) 

는 :

@subscriber(NewRequest) 
def redirect(event): 
    if event.request.scheme == "http": 
     raise HTTPFound("https://" + event.request.host + event.request.path_qs) 

나는 sendget_response를 사용하는 방식으로 보였지만, 많이 찾을 수 없습니다.

+0

고마워, 나는 이것을 시험해 볼 것이다. 나는 여전히 가장 좋은 해결책은 웹 서버 구성 파일을 수정하여 http가 기록 될 때 다시 작성한다고 생각합니다. 난 당신이 응용 프로그램 수준에서 이것을 달성 할 수 있을지 궁금 해서요. 시도해 보았지만 작동하지 않습니다. (희망이 많았습니다.) – ericg

+0

게시 한 내용이 작동하지 않는다는 것을 말합니까? 두 변형을 모두 테스트했는데 문제가 없습니다. – imsky

+1

이 작업은 'req'가보기에 전달 된 요청 개체로 대체되었는지 확인하십시오. 내 경우에는 전체 단어 'request'를 사용하여 request.scheme 등이됩니다. –

관련 문제