-2

私の質問は、スクリプトまたはその他の自動メソッドを使用して、すべてを変更する方法です

$_POST['*'] 変数、すべての PHP ファイルで、

MySQL インジェクションに耐性のある同等品。

このトピックでは、グーグルで何も見つかりませんでした。

このトピックは役に立つかもしれません: PHP で SQL インジェクションを防ぐにはどうすればよいですか?

前もって感謝します!

4

2 に答える 2

3

これを確実に行うことはできません。これはまさに PHP 開発者が不運なマジック クォート機能で実現しようとしていたことですが、どこにいてもすべての人に機能するわけではありません。

セキュリティは、作成後にアプリケーションに追加できるものではありません。そのために設計する必要があります。この場合、すべての SQL クエリを再確認し、安全な方法で書き直す必要があることを意味します。

于 2012-04-26T12:49:41.467 に答える
1

Jon が既に述べたように、すべての SQL クエリをアプリケーションでレビューする必要があります。

ただし、可能な(くだらない)解決策で質問に答えるには、Apacheを使用している場合、これを試すことができます..

  1. Apacheをセットアップし、ファイル経由でphp.ini設定できるようにしますauto_prepend_file.htaccess
  2. php_value auto_prepend_file mysql_magic_quote.inc.phpあなたに書く.htaccess
  3. このようなコードをいくつか入れてくださいmysql_magic_quote.inc.php

例:

foreach($_POST as &$var)
    $var = addquotes($var);
foreach($_GET as &$var)
    $var = addquotes($var);
foreach($_COOKIE as &$var)
    $var = addquotes($var);
foreach($_REQUEST as &$var)
    $var = addquotes($var);

ご注意ください:

  1. これは基本的に非推奨の設定をシミュレートしますがmagic_quotes_gpc、これは何らかの理由で非推奨になっています!
  2. これはただのばかげた例です - それは間違いなく副作用を引き起こします!
  3. これを行わないでください。代わりにコードを確認してください。
  4. mysql_real_escape_string()開いているデータベース接続が必要になるため、ここでは使用しませんでした。
  5. mysql_escape_string()これも非推奨であるため、ここでは使用しませんでした。

addslashes() の使用例は、データベースにデータを入力する場合です。たとえば、O'reilly という名前をデータベースに挿入するには、エスケープする必要があります。DBMS 固有のエスケープ関数 (MySQL の場合は mysqli_real_escape_string()、PostgreSQL の場合は pg_escape_string() など) を使用することを強くお勧めしますが、使用している DBMS にエスケープ関数がなく、DBMS が \ を使用して特殊文字をエスケープする場合は、この機能を使用できます。これはデータベースにデータを取得するためだけのものであり、余分な \ は挿入されません。PHP ディレクティブの magic_quotes_sybase を on に設定すると、' が代わりに別の ' でエスケープされます。

PHP ディレクティブの magic_quotes_gpc は、PHP 5.4 より前はデフォルトでオンになっており、基本的にすべての GET、POST、および COOKIE データに対して addslashes() を実行していました。二重エスケープを行うため、magic_quotes_gpc で既にエスケープされている文字列に対して、addslashes() を使用しないでください。関数 get_magic_quotes_gpc() は、これを確認するのに便利です。

于 2012-04-26T13:05:18.843 に答える