현재 위치: > 최신 기사 목록> PHP의 SQL 주입 공격을 효과적으로 방지하는 방법은 무엇입니까? 실용적인 프로그래밍 기술

PHP의 SQL 주입 공격을 효과적으로 방지하는 방법은 무엇입니까? 실용적인 프로그래밍 기술

M66 2025-06-16

PHP 프로그래밍 팁 : SQL 주입 공격 방지 방법

데이터베이스 작업을 수행 할 때는 보안이 중요합니다. SQL 주입 공격은 사이버 공격의 일반적인 방법으로 악의적 인 SQL 코드를 삽입하여 데이터베이스 오류 작업 및 데이터 누출로 이어집니다. 따라서 SQL 주입 공격을 방지하려면 응용 프로그램의 보안을 보장하기 위해 다양한 예방 조치를 취해야합니다.

1. 매개 변수화 쿼리를 사용하십시오

매개 변수화 쿼리는 SQL 주입 공격을 방지하는 가장 효과적인 방법 중 하나입니다. SQL 쿼리 문에서 사용자가 입력 한 값을 분리하여 악성 SQL 코드의 실행을 피합니다. PHP에서는 PDO (PHP Data Object) 확장자를 사용하여 매개 변수화 된 쿼리를 구현할 수 있습니다.

다음은 PDO를 사용하여 매개 변수화 된 쿼리를 구현하는 예입니다.

      $ servername = "localhost";
      $ username = "your_username";
      $ password = "your_password";
      $ dbname = "Your_database";

      노력하다 {
        $ conn = new pdo ( "mysql : host = $ servername; dbname = $ dbname", $ username, $ password);
        $ conn-> setAttribute (pdo :: att_errmode, pdo :: errmode_exception);

        $ username = $ _post [ 'username'];
        $ password = $ _post [ 'password'];

        $ stmt = $ conn-> 준비 ( "username = : username and password = : password");
        $ stmt-> bindparam ( ': username', $ username);
        $ stmt-> bindparam ( ': password', $ password);

        $ stmt-> execute ();
        $ result = $ stmt-> fetchall (pdo :: fetch_assoc);
      } catch (pdoexception $ e) {
        // 예외 처리 ...
      }
    

매개 변수화 된 쿼리를 통해 사용자 입력 값을 SQL 문과 별도로 처리하고 BindParam 방법을 통해 입력 값을 쿼리 자리 표시기에 바인딩하여 SQL 주입을 방지합니다.

2. 사용자 입력을 필터링하고 확인하십시오

매개 변수화 쿼리를 사용하는 것 외에도 SQL 주입을 방지하는 또 다른 방법은 사용자 입력을 엄격하게 필터링하고 검증하는 것입니다. Filter_var () 및 Filter_Input ()과 같은 PHP의 필터 함수를 사용하여 입력 데이터를 확인하고 정리할 수 있습니다.

다음은 사용자 입력 필터링 및 유효성 검증의 예입니다.

      $ username = $ _post [ 'username'];
      $ password = $ _post [ 'password'];

      if (! empty ($ username) &&! empty ($ password)) {
        // 사용자 이름 및 비밀번호 필터 및 확인 $ Filters_var ($ username, filter_sanitize_string);
        $ Filterspassword = Filter_var ($ password, filter_sanitize_string);
        
        // 쿼리 작업 수행 ...
      } 또 다른 {
        // 사용자 이름과 비밀번호는 비어있을 수 없습니다. "사용자 이름과 비밀번호는 비어있을 수 없습니다.";
      }
    

이 예에서는 Filter_Sanitize_string 필터를 사용하여 사용자 입력에서 안전하지 않은 문자를 지우므로 사용자가 악의적 인 SQL 코드를 입력하더라도 자동으로 제거되거나 빠져 나옵니다.

3. 데이터베이스 권한을 최소화합니다

시스템의 보안을 향상시키기 위해 데이터베이스 사용자의 권한을 최소로 제한하고 필요한 작업을 수행하는 데 필요한 권한 만 제공하는 것이 가장 좋습니다. 데이터베이스 사용자에게 과도한 권한, 특히 민감한 데이터에 대한 운영 권한을 부여하지 마십시오.

4. 정기적으로 응용 프로그램 및 데이터베이스를 업데이트하고 유지 관리합니다

응용 프로그램 및 데이터베이스의 보안을 보장하기 위해 정기적 인 업데이트 및 유지 관리가 매우 중요합니다. 알려진 보안 취약점을 적시에 수정하고 데이터 손실 또는 악의적 인 변조를 방지하기 위해 데이터베이스가 정기적으로 백업되도록하십시오.

요약

SQL 주입 공격 방지는 응용 프로그램 보안을 보장하는 중요한 단계 중 하나입니다. 매개 변수화 쿼리, 입력 필터링 및 검증, 데이터베이스 권한 제한 및 주기적 업데이트 및 유지 보수를 사용하여 SQL 주입 공격을 효과적으로 방지 할 수 있습니다. 또한 최신 보안 위협 및 취약점에 정기적으로주의를 기울이고 해당 예방 조치를 취해야합니다.