문제

XAMPP에서 PHP 5.2.6 사용 :
SQL 주입에 대해 읽었습니다 여기 다음과 같은 로그인 양식으로 시도했습니다.

<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';
?>

내가 알게 된 것은 $ 패스 변수는 이미 모든 특수 캐릭터가 탈출했다는 것입니다. 그래서 MySQL을 사용할 필요가 없습니다._진짜_탈출하다_PHP 5.2.6의 문자열?

도움이 되었습니까?

해결책

PHP 서버가 사용하도록 구성된 것 같습니다. 마법 인용문. PHP에서 모든 수신 데이터를 자동으로 탈출하는 PHP의 더 이상 사용되지 않은 설정으로 PHP 스크립트. 더 이상 사용되지 않으며 PHP 6에서 제거됩니다. Zend의 이유는 다음과 같습니다 마법 따옴표를 제거합니다.

많은 것들이 효과가 있지만 다른 사람들을 깨뜨리는 '마법'에 의존하지 않는 것이 낫습니다. 입력을 명시 적으로 탈출하는 것이 더 신뢰할 수 있으며 더 나은 코드를 디자인 할 수 있습니다. 예를 들어, 모든 입력이 같은 방식으로 탈출 할 필요는 없습니다.

다른 팁

값은 이로 인해 피해 질 수 있습니다 마법 인용문 서버 구성에서 활성화됩니다. 마법 인용문은 기본적으로 당신이 언급 한 정확한 이유 때문에 매우 나쁜 것으로 간주됩니다. 들어오는 데이터를 자동으로 탈출하는 기능에 의존하는 것은 안전하지 않습니다. 그것은이다 많이 런타임에 직접하는 것이 좋습니다.

마법의 인용문에 대한 자세한 내용과 그들이 나쁜 이유와 비활성화하는 방법은 이러한 질문/답변 중 몇 가지를 살펴보십시오.

아니, 나는 당신이 여기에 있다고 생각하지 않습니다. 이 예에서 PHP가 특수 문자를 마술처럼 탈출하든 아니든, 통역사는 수행하지 않을 것입니다. MySQL 특정 쿼리 args에서 탈출.

이 코드에 취약성이있을 가능성이 매우 높습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top