2012-04-24 4 views
3

내 응답 헤더에 사용자 정의 매개 변수를 직접 전달합니다. 내가 배운 것은 좋은 생각이 아니기 때문에 사용자가 헤더를 조작 할 수 있고 크로스 사이트 스크립팅 공격 및 기타 여러 가지 공격을 유발할 수 있습니다.응답 헤더 유효성 검사 :

https://www.fortify.com/vulncat/en/vulncat/python/header_manipulation.html

은 내가이 문제를 방지하고 있는가하는 것은 "\ r에"빈 문자열 "\ n을"문자를 ""대체하여 "HTTP 응답 분할"에 대한 사용자 입력의 유효성을 검사합니다. 이것으로 충분합니까 아니면 다른 문자도 확인해야합니다. 어떤 포인터가 큰 도움이 될 것입니다.

이것은 내 코드입니다.

if(response != null) 
    { 
    newResponse = response.replaceAll("[\r\n]", ""); 
    } 

이런 종류의 공격을 막기에 충분하거나 다른 문자의 유효성을 검사해야합니다.

답변

3

허용 목록은 블랙리스트보다 훨씬 안전합니다. 화이트리스트를 사용할 수 있는지 여부는 사용자가 정의한 매개 변수에 대해 얼마나 알고 있는지에 따라 다릅니다.

여기

더 :

http://cwe.mitre.org/data/definitions/113.html

+0

+ 1 화이트 허용. * 허용되는 문자를 지정하십시오. 모든 가능한 공격 경로 및 악용 시나리오에 대한 충분한 지식이 있다고 가정하지 마십시오. 가능한 모든 악의적 인 문자열/문자를 열거하고 거부 할 수 있습니다. 특히 유니 코드 세계에서 또는 심지어 잘못된 형식의 유니 코드 코드 포인트에 대해서 생각하지 못했던 것이 항상있을 것입니다. – Cheekysoft

+0

예가 좋은 방법입니다. 응답에 파일 이름을 전달 중입니다. 정규식을으로 변경했습니다. if (response! = null) { newResponse = response.replaceAll ("[^ \\\\ _a-zA-Z0-9-./]", "")); } @artbristol 귀하의 도움에 감사드립니다. –

0

귀하가 제공 한 정보는 적절한 대답을하기에 충분하지 않습니다. 우리는 당신의 행동이 충분히 좋은지 아닌지와 당신의 코드가 어떤 환경에서 움직이는지를 알기 위해 당신이 매개 변수 값을 가지고 무엇을하는지 알아야 할 것입니다. 짧은 100 % 올바른 (그러나 꽤 쓸모없는) 대답은 " 아니."

보안은 원래의 컨텍스트 외부에서 가져온 간단한 글 머리 기호 다음에 오는 것으로 구현되지 않습니다. 파이썬 컨텍스트에서 가져 와서 Java 컨텍스트에 직접 배치했다. 환경과 코드가하는 일을 완전히 이해해야합니다. 은색 탄환은 없습니다.

+0

오해 질문의 일부 따라서는 관련이없는 주석을 제거했습니다. – Torben

+0

프레드 브룩스에 대한 좋은 참조 ... – SyntaxRules

관련 문제