2011-03-10 4 views
1

XSS를 막는 것은 실제로 사용자 입력을 출력 할 때마다 htmlspecialchars()를 실행해야한다는 것을 의미합니까? 예를 들어, 사용자 이름을 표시 할 때마다? 정말 지루한 것 같습니다.PHP로 XSS 예방하기

더 쉬운 방법이 있습니까?

+0

래퍼 함수의 이름을 짧게하면 지루함을 덜 수 있습니다. (또한 charset 매개 변수를 피하기 위해). 또는 템플릿의 맨 위에 array_map + htmlescape를 사용하십시오. – mario

+1

[틀린 코드를 잘못 만든다] (http://www.joelonsoftware.com/articles/Wrong.html)는 이런 종류의 일에 대해 흥미로운 토론을하고 있으며 실수로 잊어 버리지 않도록 변수 이름에 접두어를 사용한다. htmlspecialchars()를 실행하십시오. 즉, 수동으로 무엇이든하는 것은 끌기입니다 - 추상화하십시오! – chucksmash

답변

3

공격 대상이 될 염려가있는 경우 양식이 외부 사이트가 아닌 귀하의 사이트에서 제출되는지 항상 확인해야합니다. 출처. 세션을 사용할 수 있습니다 : 세션에서 값이 맞으면 양식이 괜찮습니다. 그렇지 않으면 양식이 봇을 사용하여 제출되었습니다.

악의적 인 스크립트를 호스팅하는 것이 걱정된다면 그렇습니다. 사용자가 입력 한 모든 컨텐츠를 공개 및 관리자 용으로 탈출해야합니다.

이 쉽게해야한다 :

예를 :

function h($string) { 
    return htmlspecialchars($string); 
} 

당신은 당신을 위해 당신의 변수를 탈출하는 템플릿 언어를 고려할 수 있습니다. http://www.h2o-template.org/

+3

... 편집증 환자는 제외하고 'htmlspecialchars ($ string, ENT_QUOTES, 'UTF-8')' – sdleihssirhc

+0

그가 말한 내용/\ – Dimitry

0

그래, 매번.

더 쉬운 방법은이 작업을 수행하는 템플릿을 사용하는 것입니다. 스스로 확인하거나 XSLT 또는 개인 fave와 같은 것으로 조사하십시오. PHPTAL

+0

템플릿이 당신을 위해 무엇을합니까? 즉, 코드는 어떻게 생겼을 까? –

+0

그것이 당신을 위해 무엇을 어떻게 보이는지는 매우 다른 주제입니다. 많은 템플릿에는 구문이 다릅니다. PHPTAL은 xml처럼 보입니다. 똑똑한 사람은 괄호로 흉칙 해 보이지만 각자 자신에게. 템플릿 시스템은 (x) html 코드로 구조를 적용하고, 비즈니스 로직을 뷰와 분리하고, 코드를 깨끗하게 유지하고, 입력 인코딩과 같은 일부 작업을 자동으로 수행 할 수 있습니다. –

0

예상되는 콘텐츠 유형에 따라 다릅니다. 예를 들어 당신은 단지 문자를 기대하는 경우는 숫자 만

$input = preg_replace("/[^0-9]*/", "", $input); 

또는 혼합되어 다른 문자가 다음 사용해야합니다 예상되는 경우를 기대하는 경우 당신은

$input = preg_replace("/[^a-zA-Z]*/", "", $input); 

을하거나 수

$input = htmlspecialchars($input, ENT_QUOTES, 'UTF-8');