2010-12-02 4 views

답변

5

문맥에 따라 크게 다릅니다.

또한 인코딩은 아이디어의 플래시가 아닌 것입니다. 당신은 특별한 의미를 가지고 XSS에 사용할 수있는 모든 문자 ... 경우 a

  • <
  • >
  • "
  • '
  • &

를 인코딩한다 중요하지 않은 것보다 적은 부분을 인코딩하는 간단한 예 이 같은 것입니다 ...

Dodgy 사이트에 오신 것을 환영합니다. 홈페이지에 링크하십시오.

<a href="http://www.example.com" onclick="window.location = 'http://nasty.com'; return false;">View user's website</a> 

당신이 따옴표를 인코딩했다 악성 사용자가 입력

... 분명하게

http://www.example.com" onclick="window.location = 'http://nasty.com'; return false; 

..., 그 공격이 유효하지 않습니다.

+1

우수 사례 +1 +1 – Yahel

+0

+1 - 좋은 예. – Kyle

+0

@alex - 콘텐츠를 출력 한 유일한 장소가 '

$ outputcontenthere

'이면'less than '인코딩 만 괜찮을 것이라고 생각하십니까? – Kyle

0

모든 사용자 입력을 탈출했다면 안전해야합니다.

모든 곳에서 모든 것이 나타납니다. 프로필의 사용자 이름조차도.

+1

특히 사용자 이름. 재미있는 일은 소셜 웹 사이트의 사용자가 자바 스크립트를 사용자 이름에 넣을 때 발생할 수 있습니다. 이러한 종류의 사이트에 사용자 목록이 꽤 자주 표시됩니다. 즉, 모든 사용자 입력 또는 모든 신뢰할 수없는 입력을 피해야합니다. – paprika

+0

@paprika : 모두가 사용자 이름의 영향을받을 것입니다 ... 나는 그것에 대해 생각하지 않았습니다. – John

+8

정말로 당신의 아들을'Robert '라고지었습니다.); DROP TABLE 학생; -'? – eyelidlessness

2

아니요. 사용자 입력 내용에 관계없이 모든 사용자 입력을 이스케이프 처리해야합니다.

+1

HTML을 16 진수로 테스트 페이지에 붙여 넣었습니다. 비슷한 서버 측 출력 방법과 비슷합니다. 텍스트 ''는 페이지에 나타나지만 실제로 스크립트를 실행하지는 않습니다. HTML 16 진수 또는 Base 64 인코딩은 어떻게 끝나게됩니까? – Kyle

+0

네 말이 맞아. 내 예제를 제거하십시오. – Yahel

2

페이지의 인코딩이 중요한 경우도 있습니다. 즉, 페이지 문자 집합이 정확하지 않거나 모든 적용 가능한 부분에서 일치하지 않으면 잠재적 취약점이있을 수 있습니다. 자세한 내용은 http://openmya.hacker.jp/hasegawa/security/utf7cs.html을 참조하십시오.

2

사용중인 프레임 워크에 따라 많은 사람들이 이제 입력 유효성 검사 모듈을 사용합니다. 강의를 할 때 소프트웨어 학생들에게 말하는 핵심 부분은 입니다. 이미 존재하는 입력 유효성 모듈을 사용하십시오!

휠을 재발 명하는 것은 이미 존재하는 시도하고 테스트 된 모듈을 사용하는 것보다 효과적이지 않습니다. .Net에는 사용자가 필요로하는 대부분의 것들이 있습니다. (허용되는 유일한 입력 만 알면) 화이트리스트에 쉽게 넣을 수 있습니다. (알려진 '나쁜'사안이 항상 바뀌지 만 여전히 가치가있는 것처럼 보이지만 여전히 가치가 있습니다.)

관련 문제