2011-07-31 3 views
1

나는 html injection.i 방지하는 방법을 알고 도처에 검색이 website.But에 설득력있는 대답을 가지고이 website.but에 두 가지 질문을 넣어 가지고, 내가 만든 내 스크립트를 제공 오전 mysql을 방지하기위한, 내 HTML 양식에 HTML을 주입.도움을 HTML 주입 방지에 필요한

 //sql injection prevention 
     $name =mysql_real_escape_string($_POST['name']); 
    $login = mysql_real_escape_string($_POST['login']); 
    $user = mysql_real_escape_string($_POST['user']); 

//striping tags 
    $user =strip_tags($user); 
    $login = strip_tags($login); 
    $name =strip_tags($name); 

이 후 난 내 데이터베이스에 아래의 스크립트를 사용하여 내 HTML에 이름, 로그인, 사용자 양식에 넣어 및 저장하여 내 스크립트가 얼마나 잘 작동하고 있는지 확인하기 위해 노력

<script> 
document.location = "http://badurl"; 
</script> 

하지만 위의 스크립트를 데이터베이스에 저장하고 페이지에 표시하기 위해 페이지를 표시하려고 시도했을 때 badurl site.i에갔습니다. strip_tags가 작동하지 않는 이유를 알고 싶습니다. 당신은 우리가 당신을 인쇄하기 전에 필드에 htmlspecialchars를 사용해야합니다 (아래의 스크립트처럼) while 루프에서

while ($row = mysql_fetch_array($query)) { 
    echo('<big><big><big style="color: rgb(158, 0, 0);">' . $row['name'] . '&nbsp;&nbsp;</big></big></big><p>'); 
    echo('<big><div style="text-align: justify;">' . $row['login'] . '&nbsp;&nbsp;</big> </div>'); 

    echo('<div style="text-align: justify;">' . $row['user'] . '&nbsp;&nbsp;</div>'); 
+2

데이터를 데이터베이스에 저장하기 전에'strip_tags' 또는 mysql_real_escape_string을 제외한 다른 것을 호출 할 필요가 없습니다. 데이터를 잘못 작성하면 다시 되돌릴 수 없으므로 데이터를 파괴하지 마십시오. * HTML 웹 페이지 *에 표시하려면 * 아래의 Dogbert의 대답과 같이 'htmlspecialchars'를 사용할 수 있습니다. –

+0

답장을 보내 주신 grossman에게 감사합니다. – test

답변

5

을 반드시 htmlspecialchars를 넣을 수있는 방법을 말씀 해주십시오 수 있습니다.

while ($row = mysql_fetch_array($query)) { 
    echo('<big><big><big style="color: rgb(158, 0, 0);">' . htmlspecialchars($row['name']) . '&nbsp;&nbsp;</big></big></big><p>'); 
    echo('<big><div style="text-align: justify;">' . htmlspecialchars($row['login']) . '&nbsp;&nbsp;</big> </div>'); 

    echo('<div style="text-align: justify;">' . htmlspecialchars($row['user']) . '&nbsp;&nbsp;</div>'); 

은 참조 : http://php.net/manual/en/function.htmlentities.php

+4

왜 'htmlspecialchars'가 아니겠습니까? – Gumbo

+2

예 .. UTF8 날에'htmlspecialchars'가 갈 길입니다. 움라우트 등에 엔티티를 사용할 필요가 없습니다. – ThiefMaster

+0

@ 곰보, 감사합니다. 업데이트 됨. – Dogbert

1

내가 HTMLPurifier 라이브러리 대신 원시 PHP 함수를 제안합니다.

0

모든 태그를 모두 제거하려면 strip_tags를 사용하십시오.

태그를 인코딩하려면 htmlspecialchars 또는 htmlentities를 사용하십시오.

삽입을 유발할 수 있지만 다른 태그를 허용하는 태그를 선택적으로 제거하려면 domdocument를 사용하여 솔루션을 구현하는 것이 좋습니다.