2009-06-27 4 views
1

는 :
나는 SQL 주입 here에 대해 읽고 시도 그 다음 로그인 양식 :는 SQL 주입 XAMPP에서 PHP 5.2.6을 사용하여 시도 PHP 5.2.6

<html><body> 
     <form method='post' action='login.php'> 
      <input type='text' name='user'/> 
      <input type='text' name='pass'/> 
      <input type='submit'/> 
     </form> 
</body></html> 

및 PHP 코드 :

<?php 
$user = $_POST['user']; 
$pass = $_POST['pass']; 
$query = "Select * from users where user='$user' AND pass='$pass'"; 
echo $query; 
mysql_connect('localhost','root',''); 
mysql_select_db('test'); 
$res = mysql_query($query); 
if($res) $row = mysql_fetch_assoc($res); 
if($row) echo 'yes'; 
?> 

내가 알아 낸 것은 $ pass 변수가 이미 모든 특수 문자를 이스케이프 처리했습니다. 그럼, mysql을 사용할 필요가 없습니다 ___ PHP 5.2.6에서 문자열을 탈출 하시겠습니까?

답변

3

PHP 서버가 Magic Quotes을 사용하도록 구성되었을 가능성이 있습니다. PHP 스크립트에서 들어오는 모든 데이터를 자동으로 이스케이프 처리하는 PHP의 비추천 설정입니다. 더 이상 사용되지 않으며 PHP 6에서 제거됩니다. Here are Zend's reasons 마술 따옴표를 삭제하십시오.

'마법'에 의존하지 않는 것이 좋습니다. 많은 일을하지만 다른 사람을 깰 수 있습니다. 명시 적으로 입력을 이스케이프 처리하는 것이 더 안정적이며 더 나은 코드를 설계 할 수 있습니다. 예를 들어 모든 입력을 동일한 방식으로 이스케이프 처리해야하는 것은 아닙니다.

4

서버 구성에서 Magic Quotes이 활성화되어 있기 때문에 값이 누락 될 수 있습니다. 마술 따옴표는 당신이 언급 한 정확한 이유 때문에 기본적으로 매우 나쁜 것으로 간주됩니다. 들어오는 데이터를 자동으로 벗어나는 기능이 있는지 여부는 신뢰할 수 없습니다. 런타임에 직접 수행하는 것이 더 입니다.

매직 따옴표에 대한 자세한 내용은

, 그들은 나쁜 것, 그들을 사용하지 않도록 설정하는 방법을 왜 이러한 SO 질문/답변을 몇 번 봐 걸릴 :

3

아니요, 여기 있다고 생각하지 않습니다. 이 예제에서 php가 특수 문자를 마술로 이스케이프할지 어떨지에 상관없이, 인터프리터는 mysql 특정을 쿼리 args에서 이스케이프 처리하지 않습니다.

나는이 코드에 취약점이있을 가능성이 매우 높다고 생각합니다.