>백엔드 개발 >PHP 튜토리얼 >PHP 웹사이트에서 SQL 주입을 방지하는 방법은 무엇입니까?

PHP 웹사이트에서 SQL 주입을 방지하는 방법은 무엇입니까?

WBOY
WBOY원래의
2016-07-25 09:13:401190검색
웹사이트의 운영 보안은 확실히 모든 웹마스터가 고려해야 할 문제입니다. 우리 모두 알고 있듯이 대부분의 해커는 SQL 삽입을 사용하여 웹사이트를 공격합니다.

가장 독창적인 정적 웹사이트가 가장 안전합니다. 오늘은 귀하의 웹사이트가 SQL에 의해 주입되는 것을 방지하기 위한 PHP 주입의 보안 사양에 대해 이야기하겠습니다.

요즘 주류 웹사이트 개발 언어는 여전히 PHP이므로 PHP 웹사이트에서 SQL 삽입을 방지하는 방법부터 시작해 보겠습니다.

Php 주입의 보안 예방 위의 과정을 통해 Php 주입의 원리와 기법을 이해할 수 있으며, 이에 상응하는 예방 방법도 개발할 수 있습니다.
첫 번째는 서버의 보안 설정입니다. 주로 php mysql의 보안 설정과 리눅스 호스트의 보안 설정이 있습니다. php mysql 인젝션을 방지하려면 먼저 Magic_quotes_gpc를 On으로 설정하고 display_errs를 Off로 설정합니다. id 유형인 경우 코드와 같이 intval()을 사용하여 정수 유형으로 변환합니다.



$idintval($id);
mysql_query"*fromexamplewherearticieid'$id'"; 또는 다음과 같이 작성합니다: mysql_query("SELECT*FROMarticleWHEREarticleid".intval($id)."")
문자 유형인 경우 addlashes()를 사용하여 필터링한 다음 다음과 같이 "%" 및 "_"를 필터링합니다.
$searchaddslashes($search);
$searchstr_replace(“_”,”_”,$search);
$searchstr_replace("%","%",$search);
물론, PHP 일반 주입 방지 코드를 추가할 수도 있습니다:
/***************************
PHP 범용 주입 방지 보안 코드
설명:
전달된 변수에 잘못된 문자가 포함되어 있는지 확인
$_POST, $_GET
등 기능:
주사방지
  1. *****************************/
  2. //필터링할 잘못된 문자
  3. $ArrFiltratearray("'",";","union");
  4. / /오류 발생 후 리디렉션할 URL을 입력하지 않으면 이전 페이지는 기본적으로
  5. $StrGoUrl"";
  6. //배열에 값이 있는지 여부
    functionFunStringExist($ StrFiltrate,$ArrFiltrate){

  7. feach($ArrFiltrateas$key>$value){

  8. if(eregi($value,$StrFiltrate)){

  9. returntrue;

  10. }

  11. }

  12. returnfalse;

  13. }

  14. //$_POST 및 $_GET 병합

  15. if( function_exists(array_merge)){

  16. $ArrPostAndGetarray_merge($HTTP_POST_VARS,$HTTP_GET_VARS);

  17. }else{

  18. feach($HTTP_POST_VARSas$ 키>$값){

  19. $ArrPostAndGet[]$value;

  20. }

  21. feach($HTTP_GET_VARSas$key>$value){

  22. $ ArrPostAndGet[]$value;

  23. }

  24. }

  25. //확인 시작

  26. feach($ArrPostAndGetas$key>$value){

  27. if(FunStringExist($ value,$ArrFiltrate)){

  28. echo "alert(/"Neeao 프롬프트, 잘못된 문자/");";

  29. if(empty($StrGoUrl )){

  30. echo "histy.go(-1);";

  31. }else{

  32. echo "window.location/"".$StrGoUrl."/ ";";

  33. }

  34. exit;

  35. }

  36. }

  37. ?>

  38. /* ******** ****************
코드 복사checkpostget.php로 저장
그런 다음 각 PHP 파일 앞에 include("checkpostget.php")를 추가하세요.
******************************/
또한 관리자 사용자 이름과 비밀번호는 md5로 암호화되어 PHP 주입을 효과적으로 방지할 수 있습니다.
서버와 mysql에서도 강화해야 할 몇 가지 보안 예방 조치가 있습니다.
Linux 서버의 보안 설정:
비밀번호를 암호화하려면 "/usr/sbin/authconfig" 도구를 사용하여 비밀번호 섀도우 기능을 활성화하고 passwd를 암호화합니다.
중요한 파일에 대한 액세스를 금지하려면 Linux 명령 인터페이스를 입력하고 프롬프트에
를 입력하세요. #chmod600/etc/inetd.conf//파일 속성을 600으로 변경
#chattr I /etc/inetd.conf // 파일 소유자가 루트인지 확인
#chattr–I /etc/inetd.conf //이 파일의 변경을 제한합니다
모든 사용자가 su 명령을 통해 루트 사용자로 변경하는 것은 금지되어 있습니다
su 구성 파일, 즉 /etc/pam.d/ 디렉터리의 시작 부분에 다음 두 줄을 추가합니다.
충분한 인증 /lib/security/pam_rootok.sodebug
인증 필요 /lib/security/pam_whel.sogroupwheel
모든 특별 계정 삭제
#userdel lp 등 사용자 삭제
#groupdellpetc 그룹 삭제
사용하지 않는 suid/sgid 프로그램 금지
#find/-typef(-perm-04000 -o–perm-02000)-execls–lg{};



http://hi.baidu.com/bigideaer/bl...7e76e11a4cffd0.html

전달된 변수에 잘못된 문자가 포함되어 있는지 확인하기 위해 다음 코드를 security.inc.php와 같은 공개 파일에 넣습니다. 이 파일을 각 파일에 포함하면 변수가 필터링된 후 모든 프로그램에 제출될 수 있습니다. , 우리는 효과를 단번에 달성합니다.



간략한 설명: /*************************
설명:
전달된 변수에 잘못된 문자가 포함되어 있는지 확인
예: $_POST, $_GET
기능: 주입 방지
**************************/

코드는 다음과 같습니다:

  1. //필터링할 잘못된 문자
  2. $ArrFiltratearray( "", ";","union");
  3. //오류 발생 후 이동할 URL입니다. 입력하지 않으면 이전 페이지가 기본값으로 설정됩니다.
  4. $StrGoUrl" ";
  5. / / 배열에 값이 있는지 여부
  6. functionFunStringExist($StrFiltrate,$ArrFiltrate){
  7. feach($ArrFiltrateas$key>$value){
  8. if(eregi($ value,$StrFiltrate)){
  9. returntrue
  10. }
  11. } returnfalse; >
    }


  12. //$_POST 및 $_GET 병합

  13. if(function_exists(array_merge)){

  14. $ArrPostAndGetarray_merge($HTTP_POST_VARS ,$HTTP_GET_VARS);

  15. }else{

  16. feach($HTTP_POST_VARSas$key>$value){

  17. $ArrPostAndGet[]$value; }

  18. feach($HTTP_GET_VARSas $key>$value){

  19. $ArrPostAndGet[]$value;

  20. }

  21. }


  22. //검증 시작

  23. feach($ArrPostAndGetas$key>$value){

  24. if(FunStringExist($value,$ArrFiltrate)){

  25. echo""

  26. if(emptyempty($StrGoUrl)){

  27. echo" histy.go (-1);";

  28. }else{

  29. echo"window. location"".$StrGoUrl."";< ;/script>";

  30. }

  31. exit;

  32. }

  33. }

  34. ?>



  35. 코드 복사
  36. checkpostget.php로 저장
그런 다음 각 PHP 파일 앞에 include("checkpostget.php");를 추가하세요.
방법 2



코드는 다음과 같습니다.

/*모든 GET 변수 필터링*/
feach($_GETas$get_key>$get_var)
    {

  1. if(is_numeric($get_var)){

  2. $get[strtolower($get_key)]get_int($get_var)

  3. }else{

  4. $get [strtolower($get_key)]get_str($get_var);

  5. }

  6. }


  7. /*모든 POST 변수 필터링*/

  8. feach($_POSTas$post_key>$post_var)

  9. {

  10. if(is_numeric($post_var)){

  11. $post[strtolower($post_key) )]get_int($post_var);

  12. }else{

  13. $post[strtolower($post_key)]get_str($post_var)

  14. }


  15. /*필터 함수*/

  16. //정수 필터 함수

  17. functionget_int($number)

  18. {

  19. returnintval($number);

  20. }

  21. //문자열 필터 함수

  22. functionget_str($string)

  23. {

  24. if(!get_magic_quotes_gpc()){

  25. returnaddslashes($string);

  26. }

  27. return$string;

  28. 코드 복사

  29. 첫 번째는 데이터를 이스케이프하는 방법입니다

    두 번째 방법은 별도의 파일에 작성되어 각 PHP 파일에 도입됩니다

    각 데이터를 벗어날 수 있습니다

    함수추가슬래시($string){

    if(is_array($string)){

    feach($stringas$key>$val){

    $string[$key]saddslashes($val);

    }

    }그밖에{

    $stringaddslashes($string);

    }

    return$string;

    }





    ########################################### ## #############

    $magic_quoteget_magic_quotes_gpc();

    if(비어 있음($magic_quote)){

    $_GETsaddslashes($_GET);

    $_POSTsaddslashes($_POST);

    }

이 주제는 2015-9-20 13:05에 Xiaobei에 의해 고정 해제되었습니다


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