>  기사  >  백엔드 개발  >  SQL 인젝션 취약점 및 예방에 대한 자세한 설명

SQL 인젝션 취약점 및 예방에 대한 자세한 설명

小云云
小云云원래의
2018-03-14 14:42:082166검색

SQL 주입의 원리: 원본 SQL 문에 SQL 코드 조각을 추가하고, 특수 SQL 문을 구성하고, 프로그램 자체 권한을 사용하여 필요한 작업을 구현합니다.

이제 사용자 테이블이 있다고 가정합니다.

uidusernamepwd

1adminadmin222

2custome123456

이제 로그인 작업을 수행합니다.

  1. <?php  
        $conn=mysqli_connect("localhost","root","root","test");  
        // 连接数据库test  
        if (!$conn) {  
            # code...判断链接是否成功  
            echo "连接失败!";  
            echo mysqli_connect_error();  
            exit();  
        }  
        mysqli_query($conn,"set names utf8");  
        // 指定编码格式  
        $user = $_GET[&#39;user&#39;];
        $pwd = $_GET[&#39;pwd&#39;];
        $sql="select * from
     user where username = &#39;{$user}&#39; and pwd = &#39;{$pwd}&#39;";  
        // sql语句  
        $result=mysqli_query($conn,$sql);  
        // 执行sql语句,将执行结果返回到结果集中  
        $row=mysqli_fetch_array($result);  
        // 从结果集中取得一行作为数组  
        echo "<pre class="brush:php;toolbar:false">";  
        print_r($row);  
    ?>

위 코드는 간단한 로그인 작업을 수행합니다. 이를 브라우저에서 실행합니다. : localhost/test/login.php?user=admin&pwd=admin222, 실행된 SQL 문은 다음과 같습니다. select * from user where username= 'admin' 및 pwd = 'admin222', 실행 결과를 얻습니다.

localhost/test/login.php?user=admin&pwd=admin으로 요청하시면, 비밀번호가 사용자 이름과 일치하지 않아 쿼리 결과가 나오지 않습니다. 즉, SQL 문: select * from user where username= 'admin' 및 pwd = 'admin'은 결과를 찾을 수 없습니다. 그런 다음 SQL 문인 경우: 선택 * 사용자 이름= 'admin'이고 비밀번호 = 'admin' 또는 1 = 1인 사용자로부터;? 직접 시도해 볼 수 있으며 다음을 얻을 수 있습니다:

uidusernamepwd

1adminadmin222

2custome123456

클라이언트에서 localhost/test/login.php?user=admin&pwd=admin%20or%201=1에 액세스하면 어떻게 됩니까? ?

검증을 직접 우회하고 데이터베이스에서 관리자 정보를 얻었습니다. 이것은 간단한 SQL 주입입니다.

SQL 주입 방지:

(1) 정수형 변수인 경우 intval() 함수나 (int)를 사용하여 들어오는 모든 매개 변수를 숫자 값으로 변환합니다.

(2) 문자 변수의 경우 addlashes()를 사용하여 '(작은따옴표), "(큰따옴표), (백슬래시) 및 (공백)을 모두 백슬래시가 포함된 문자로 변환합니다.

(3 ) 일부 특수 문자를 이스케이프하거나 필터링합니다.

(4) 데이터 백업을 하세요.

관련 권장 사항:

역직렬화 객체 주입 취약점 관련

SQL 주입 취약점 검사 도구

php는 SQL 주입 취약점을 방지합니다. 코드

위 내용은 SQL 인젝션 취약점 및 예방에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.