> 백엔드 개발 > PHP 튜토리얼 > SQL 인젝션 방지를 위한 PHP 함수 소개

SQL 인젝션 방지를 위한 PHP 함수 소개

高洛峰
풀어 주다: 2016-11-29 15:25:18
원래의
1821명이 탐색했습니다.

몇일 전, 웹사이트가 인젝션되었습니다. 이제 SQL 인젝션을 방지하기 위해 PHP에 내장된 여러 처리 기능을 소개하겠습니다. 예를 들어 PHP의 MySQL 작업 기능에는 addlashes(), mysql_real_escape_string(), mysql_escape_string()이 있습니다. ) 대기 함수

구체적인 사용법: SQL 주입 방지를 위한 추가 래시

국내 PHP 프로그래머 중 상당수가 여전히 SQL 주입 방지를 위해 추가 래시에 의존하고 있지만, SQL 주입 방지를 위해 모두가 검사를 강화하는 것이 좋습니다. 중국인. addlashes의 문제는 해커가 0xbf27을 사용하여 작은따옴표를 대체할 수 있는 반면, addlashes는 0xbf27을 0xbf5c27로만 변경하므로 유효한 멀티바이트 문자가 됩니다. 0xbf5c는 여전히 작은따옴표로 간주되므로 addlashes가 성공적으로 차단할 수 없습니다.

물론 addlashes는 쓸모가 없습니다. 다중 바이트 문자의 경우 mysql_real_escape_string을 사용하세요.

또한 PHP 매뉴얼의 get_magic_quotes_gpc 예에서는 코드는 다음과 같습니다:

function post_check($post)

{ _quotes_gpc is Open                                     🎜> $ post = str_replace("_ ", "_" , $post); // '_' 필터링

$post = str_replace("%", "%", $post) // '_' 필터링 ' % ' 필터링                                                                                                                              > $ 반환 post;

function inject_check($sql_str) {

{ return eregi('select|insert|update|delete|'| function verify_id($id= null)

 {  

 if (!$id) {exit('매개변수가 제출되지 않았습니다! '); } // 비어 있는지 여부 판단

elseif (inject_check($id)) { exit('제출된 매개변수가 불법입니다!') } // 주입 판단

elseif (! is_numeric($id)) { exit('제출된 매개변수가 불법입니다!') } // 수치 판단                                                                                                                      $id;                                           특수 문자는 연결의 현재 문자 집합을 고려하여 이스케이프 처리되므로 안전합니다. mysql_query()와 함께 사용합니다.

참고: mysql_real_escape_string()은 % 및 _을 이스케이프하지 않습니다.

mysql_real_escape_string, 예#1 mysql_real_escape_string() 예, 코드는 다음과 같습니다.

& lt;? PHP

$ item = "zak과 derick의 노트북"; escapd_item = MySQL_Real_escape_String ($ item )

printf ( "이스케이프된 문자열: %sn" , $escaped_item );

//위의 예는 다음 출력을 생성합니다.

//이스케이프된 문자열 : Zak's and Derick's Laptop

mysql_escape_string

이 함수는 unescaped_string을 이스케이프하여 mysql_query()에서 안전하게 사용할 수 있도록 합니다.

참고: mysql_escape_string()은 % 및 _을 이스케이프하지 않습니다. 이 함수는 mysql_real_escape_string()이 연결 핸들을 받아들이고 현재 문자 집합에 따라 문자열을 전송한다는 점을 제외하면 mysql_real_escape_string()과 완전히 동일합니다. mysql_escape_string()은 연결 매개변수를 허용하지 않으며 현재 문자 세트 설정에 신경 쓰지 않습니다.

예제 1. mysql_escape_string() 예, 코드는 다음과 같습니다.

$item = "Zak의 노트북";

$escaped_item = mysql_escape_string($item);

printf("이스케이프된 문자열: %sn", $escaped_item); >

? >

//출력:

//이스케이프된 문자열: Zak's Laptop

mysql_real_escape_string과 mysql_escape_string의 차이점:

mysql_real_escape_string은 (PHP 4 >= 4.3.0, PHP 5)에 있어야 하며, 그렇지 않으면 mysql_escape_string만 사용할 수 있습니다. 둘 사이의 차이점은 mysql_real_escape_string은 연결의 현재 문자 집합을 고려하지만 mysql_escape_string은 고려하지 않습니다. .

판단을 통해 종합적으로 처리할 수 있으며 코드는 다음과 같습니다.

function cleanuserinput($dirty){

if (get_magic_quotes_gpc()) {

$clean = mysql_real_escape_string(stripslashes ($dirty));

}else{

$clean = mysql_real_escape_string($dirty)

return $clean;

}

요약하자면: * addlashes()는 강제 추가입니다. * mysql_real_escape_string()이 문자 집합을 결정하지만 PHP 버전에 대한 요구 사항이 있습니다. * mysql_escape_string은 연결의 현재 문자 집합을 고려하지 않습니다.

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿