2012-01-09 2 views
1

내 웹 사이트 라이브 가기 전에, 나는 보안에 대한 몇 가지 생각을했다.

제공된 경우 XSS 및 SQL 주사에 대해 완전히 불안전이 베어 스크립트를 고려한다.

<? 
if ($_POST['submit']=="1"){ 

    $input = $_POST['input']; 
    echo "echo the input: ".$input."<br/>"; 
} 
?> 
<form action="<? $PHP_SELF;?>" method="POST"> 
<input type="text" name="input" value="<? echo $_POST['input'];?>"/> 
<input type="hidden" name="submit" value="1"/> 
<input type="submit" value="submit"/> 
</form> 

이 같은 같은 주사 (필드 입력에) 작동하지 않는 이유는 무엇 을 궁금 : 내가 순진은 "생각하고

";unset('index.php'); 

, 에코을 종료하고 진행보다는 것을 코드. 사실 나는이 작동하지 않는 매우 기쁘게 생각하지만 난 이유를 알고 싶습니다. 이 실제로 사용 할 일 'OR 1'의 SQL 종류에서.

내가로이 보안을 알고또는 htmlspecialchars이지만 이것은 문제가되지 않습니다. 나는 이것을 처리하는 과정에서 PHP가 어떻게 작동 하는지를 알고 싶다.

감사

+0

자신 만의 이야기 :'addslashes()','mysql_real_escape_string()'및'htmlspecialchars()'와 같은 string_munging 함수는 조심스럽게 선택 장소와 상황에 따라 원하는 보호 기능을 제공합니다. 내가 쓸 경우 의미하므로 http://stackoverflow.com/questions/110575/do-htmlspecialchars-and-mysql-real-escape-string-keep-my-php-code-safe-from-inje/110576 – Cheekysoft

답변

1

$ _POST 배열 요소의 내용은 문자열이다. 그래서, 당신이 제출할 때마다 "; unset ('index.php');" (btw, 변수에 대한 작업을 설정하지 않았다면) 문자열으로 보내고 PHP 실행 코드가 아닙니다. 당신이 평가를()를 사용하지 않는 한

, 당신은 PHP 코드 평가 것에 대해 두려워 할 필요가 없습니다.

또 다른 것은,() 쿼리를 확보하기 위해 addslashes를 사용하지만, MySQL 용 라이브러리의 전용 기능을, 같은는 mysql_real_escape_string()를 사용하지 마십시오. 또는 준비된 문과 매개 변수가있는 쿼리로 쿼리 바인딩을 사용하는 것이 좋습니다.

+0

안녕하세요. 그렇지만 xss에 대해 htmlspecialchars를 사용하지 않겠습니까? 아니면 GET 대신 POST를 사용하면 해당 코드는 안전합니까? alert ('hi'); – Email

+0

아니요, htmlspecialchars() 또는 htmlentities() 실제로 XSS (둘 다 $ _POST 및 $ _GET 및 $ _COOKIE에 대해 사용하는. 이브 실제로, rything). 나는 DB 쿼리에 대한 보안에 대해 이야기하고 있었고, addslashes()에 대해 이야기 할 때 이것을 언급했다고 생각했다. –

+0

나는 이유를 더 자세히 설명하기 때문에 이것을 대답으로 표시했다. thx 2 kolink 너무. – Email

1

당신이 eval()를 넣어 경우 작동,하지만 그렇지 않으면 다른 같은 단지 문자열입니다.

+0

를 참조하십시오 처리 평가 후면() 또는 누군가가 "평가에 주입하는 경우, 평가 (해제 ('의 index.php')). 저를 기쁘게 내가 처음 생각 나는 평가 이전에 사용되지 않는 원인 – Email

+0

는 @ 이메일 NO 당신이를 보내는 경우. 'eval (unset ($ var))'당신은 아직 ** 문자열 **을 리터럴 문자열로 보내고 있습니다 .Eval()은 PHP 실행 가능 코드로 만들기 위해 제공된 문자열을 평가하지 않고 eval() 귀하의 코드에서, 당신은 _that problem_ –