PHP WebサイトでのSQLインジェクションを防ぐにはどうすればよいですか?

WBOY
リリース: 2016-07-25 09:13:40
オリジナル
1178 人が閲覧しました
Web サイトの運用セキュリティは、すべての Web マスターが考慮すべき問題であることは間違いありません。ご存知のとおり、ほとんどのハッカーは SQL インジェクションを使用して Web サイトを攻撃します。

最もオリジナルな静的 Web サイトが最も安全です。今日は、Web サイトへの SQL インジェクションを防ぐための PHP インジェクションのセキュリティ仕様について説明します。

現在、主流の Web サイト開発言語は依然として PHP であるため、PHP Web サイトでの SQL インジェクションを防ぐ方法から始めましょう:

Php インジェクションのセキュリティ防止 上記のプロセスを通じて、Php インジェクションの原理と技術を理解することができます。 もちろん、対応する防止方法も開発できます。 1 つ目はサーバーのセキュリティ設定です。ここでは主に php+mysql のセキュリティ設定と Linux ホストのセキュリティ設定を説明します。 php+mysql インジェクションを防ぐには、コードに示すように、最初に magic_quotes_gpc を On に設定し、display_errs を Off に設定します。id 型の場合は、intval() を使用して整数型に変換します。


$idintval($id);
mysql_query”*fromexamplewherearticieid’$id’”; または、次のように記述します: mysql_query(”SELECT*FROMarticleWHEREarticleid”.intval($id).””)
文字タイプの場合は、addslashes() を使用してフィルターし、次に「%」と「_」をフィルターします。
$searchaddslashes($search);
$searchstr_replace("_","_",$search);
$searchstr_replace(“%”,”%”,$search);
もちろん、PHP ユニバーサル アンチインジェクション コードを追加することもできます:
/*****************************
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. }
  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$key>$value){
  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」ツールを使用してパスワードシャドウ機能をオンにし、パスワードを暗号化します。
重要なファイルへのアクセスを禁止するには、Linux コマンド インターフェイスに入り、プロンプトで次のように入力します:
#chmod600/etc/inetd.conf//ファイル属性を600に変更
#chattr+I /etc/inetd.conf // ファイル所有者が root であることを確認します
#chattr–I /etc/inetd.conf //このファイルへの変更を制限します
すべてのユーザーが su コマンドを通じて root ユーザーに変更することは禁止されています
su 設定ファイル、つまり /etc/pam.d/ ディレクトリの先頭に次の 2 行を追加します。 十分な認証 /lib/security/pam_rootok.sodebug
認証が必要です /lib/security/pam_whell.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 など
機能: 抗注射
**************************/

コードは次のとおりです:


  • //フィルタリングされる不正な文字
  • $ArrFiltratearray("",";","union");
  • //リダイレクトされる URLエラーの後、入力されていない場合は、デフォルトで前のページに戻ります
  • $StrGoUrl""
  • //配列に値があるかどうか
  • functionFunStringExist($StrFiltrate,$ArrFiltrate){
  • feach( $ArrFiltrateas$key>$value){
  • if(eregi($value,$StrFiltrate)){
  • returntrue;
  • }
  • returnfalse;

  • //$ をマージします_POSTと$_GET
  • if(function_exists( array_merge) ){
  • $ArrPostAndGetarray_merge($HTTP_POST_VARS,$HTTP_GET_VARS)
  • } else{
  • feach($HTTP_POST_VARSas$key>$value){
  • $ArrPostAndGet[ ]$値;
  • }
    feach($HTTP_GET_VARSas $key>$value){

  • $ArrPostAndGet[]$value;

  • }

  • feach($ArrPostAndGetas$key&g) t;$値){

  • if(FunStringExist($ value,$ArrFiltrate)){

  • echo"";

  • if(emptyempty($) StrGoUrl)){

  • echo"";

  • }else{

  • echo"";

  • }

  • exit;

  • }

  • }

  • ?>



  • コードをコピーします
  • checkpostget として保存.php
    次に、各 php ファイルの前に include("checkpostget.php"); を追加します。

  • 方法 2


  • コードは次のとおりです:
  • /*すべての GET 変数をフィルターします*/
    feach($_GETas$get_key>$get_var)

    {
    if(is_numeric($get_var)){
    $get[strtower ($ get_key)]get_int($get_var);

    }else{
    $get[strto lower($get_key)]get_str($get_var);
    1. }
    2. }

    3. /*すべての POST 変数をフィルタリングします* /
    4. feach($_POSTas$post_key>$post_var)
    5. {
    6. if(is_numeric($post_var)){
    7. $post[strto lower($post_key)]get_int($post_var);
    8. }else{
    9. $post[strto lower($post_key)]get_str($post_var);
    10. }
    11. }

    12. /*フィルター関数*/
    13. //整数フィルター関数
    14. functionget_int($number)
    15. {
    16. returnintval($number);
    17. }
    18. //文字列フィルター関数
    19. functionget_str($string)
    20. {
    21. if(!get_magic_quotes_gpc()){
    22. returnaddslashes($string);
    23. return$string;
    24. }

    25. コードをコピー

    26. 一つ目はデータをエスケープする方法です

      2 番目のメソッドは別のファイルに記述され、すべての PHP ファイルにインポートされます

      各データをエスケープできます

      関数追加スラッシュ($string){

      if(is_array($string)){

      feach($stringas$key>$val){

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

      }

      }その他{

      $stringaddslashes($string);

      }

      $string を返します;

      }





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

      $magic_quoteget_magic_quotes_gpc();

      if(空($magic_quote)){

      $_GETslashes を追加($_GET);

      $_POSTsaddslashes($_POST);

      }

    このトピックは、2015-9-20 13:05 に Xiaobei によって固定が解除されました


    ソース:php.cn
    このウェブサイトの声明
    この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
    人気のチュートリアル
    詳細>
    最新のダウンロード
    詳細>
    ウェブエフェクト
    公式サイト
    サイト素材
    フロントエンドテンプレート