ホームページ >バックエンド開発 >PHPチュートリアル >PHP アンチインジェクション構成と PHP アンチインジェクション コード_PHP チュートリアル

PHP アンチインジェクション構成と PHP アンチインジェクション コード_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-13 17:11:001004ブラウズ

php のアンチインジェクションには 2 種類あり、1 つは SQL アンチインジェクション、もう 1 つはすべての変数を送信する cms のような処理、もう 1 つは php.ini を直接設定する方法です。 。

1. インクルードするファイルのディレクトリにsafe.func.phpを渡します

2. ページに保護を追加するには、状況に応じて 2 つの方法を選択できます。

a) 保護が必要なページにコードを追加します

require_once('safe.func.php');

ページインジェクション防止とクロスサイトを実現できます
サイト全体のインジェクションを防ぎたい場合は、データベース リンク ファイル config.inc.php などの Web サイト上の公開ファイルにインジェクションを配置するだけです。
このコードを呼び出すには require_once('safe.func.php'); を追加します

safe.func.php コードは次のとおりです:

コードは次のとおりですコードをコピー
/**
* アンチインジェクション
*
* "
gt;
操作 IP: ".$_SERVER["REMOTE_ADDR"]."
操作時間: ".strftime("%Y-%m-%d %H:%M: %S")."
操作ページ:".$_SERVER["PHP_SELF"]."
送信方法: ".$_SERVER["REQUEST_METHOD"]."
送信パラメータ: " .$StrFiltKey."
データを送信: ".$StrFiltValue);
​*/

関数safe_custom_error($errno, $errstr, $errfile, $errline) {

echo "エラー番号: [$errno],$errfile の $errline 行目のエラー
";
死ぬ();
}

set_error_handler("safe_custom_error", E_ERROR);

関数safe_stop_攻撃($k, $v, $method=0) {

$filter = 配列(
"'|(および|または) .+?(>| " (および|または) .{1,6}?(=|>| );

$filter = isset($filter[$method]) $filter[$method] : $filter[0];


if(is_array($v)) {
$v = 爆破($v);
}
if (preg_match("/" . $filter . "/is", $v) == 1) {
exit("この操作は記録されています。違法な操作を続行しないでください。");
}
}

if (isset($_GET)) {

foreach($_GET as $k => $v)safe_stop_攻撃($k, $v, 0);
}
if (isset($_POST)) {
foreach($_POST as $k => $v)safe_stop_攻撃($k, $v, 1);
}
if (isset($_COOKIE)) {
foreach($_COOKIE as $k => $v)safe_stop_攻撃($k, $v, 1);
}

上記はSQLインジェクションを防ぐのにより適しています

コードは次のとおりですコードをコピー

phpで直接インジェクションを防ぐことに加えて、php.iniファイルを設定することもできます

。まず、編集ツールを使用して /usr/local/php/etc/php.ini を開きます。他の方法でインストールした場合は、設定ファイルがこのディレクトリにない可能性があります。

(1) PHP のセーフ モードをオンにする PHP のセーフ モードは、system()、

などの PHP の一部の関数を制御できる非常に重要な組み込みのセキュリティ メカニズムです。

同時に、多くのファイル操作機能が権限制御されており、/etc/passwd などの特定の重要なファイルは許可されません。 ただし、デフォルトの php.ini はセーフ モードで開かないので、セーフ モードを開いてみましょう:
セーフモード = オン

(2) ユーザーグループのセキュリティ

safe_mode がオンになり、safe_mode_gid がオフになると、PHP スクリプトはファイルにアクセスできますが、それは同じです
グループ内のユーザーもファイルにアクセスできます。
次のように設定することをお勧めします:

safe_mode_gid = off これを設定しないと、サーバー Web サイトのディレクトリ内のファイルを操作できなくなる可能性があります。たとえば、
が必要です。 ファイルを操作するとき。

(3) プログラムのホームディレクトリをセーフモードで実行します

セーフ モードがオンになっているが、特定のプログラムを実行したい場合は、実行するプログラムのホーム ディレクトリを指定できます:

safe_mode_exec_dir = D:/usr/bin

通常の状況では、プログラムを実行する必要はないため、システム プログラム ディレクトリを実行しないことをお勧めします。
次に、実行する必要があるプログラムをコピーします。次のようなものです。

safe_mode_exec_dir = D:/tmp/cmd

ただし、プログラムを実行しないことをお勧めします。その場合は、Web ディレクトリを指定してください:

safe_mode_exec_dir = D:/usr/www

(4) セーフモードでファイルを含める

一部のパブリック ファイルをセーフ モードに含める場合は、オプションを変更します:

safe_mode_include_dir = D:/usr/www/include/ 実際、通常、PHP スクリプトに含まれるファイルはプログラム自体に記述されています。これは、特定のニーズに応じて設定できます。

(5) PHPスクリプトがアクセスできるディレクトリを制御します

open_basedir オプションを使用して、指定されたディレクトリにのみアクセスするように PHP スクリプトを制御します。これにより、PHP スクリプトへのアクセスを回避できます
アクセスすべきではないファイルにより、phpshell の害はある程度制限され、通常は Web サイトのディレクトリのみにアクセスするように設定できます。

open_basedir = D:/usr/www


(6)危険な機能をオフにする


セーフモードがオンになっている場合は機能を禁止する必要はありませんが、安全性を考慮しております。たとえば、

system()を含めてコマンドを実行したり、PHP情報を閲覧したりできるPHP関数は実行したくない気がします
phpinfo() やその他の関数を禁止することができます:

Disable_functions = system、passthru、exec、shell_exec、popen、phpinfo ファイルやディレクトリの操作を禁止したい場合は、多くのファイル操作をオフにすることができます


disable_functions = chdir,chroot,dir,getcwd,opendir,readdir,scandir,fopen,unlink,delete,copy,mkdir, rmdir,rename,file,file_get_contents,fputs,fwrite,chgrp,chmod,chown


上記は、一般的に使用されるファイル処理関数の一部を示したものにすぎません。また、上記の実行コマンド関数とこの関数を組み合わせることもできます。 ほとんどの phpshell に耐えることができます。



(7) httpヘッダー内のPHPバージョン情報の漏洩を遮断


ハッカーがサーバー内の PHP バージョン情報を取得できないようにするために、http ヘッダー内の情報をオフにすることができます:


Expose_php = Off たとえば、ハッカーが www.12345.com 80 に Telnet すると、PHP 情報を見ることができなくなります。


(8) グローバル変数のクローズ登録


PHP で送信された変数 (POST または GET を使用して送信された変数を含む) は、グローバル変数として自動的に登録され、直接アクセスできます

これはサーバーにとって非常に安全ではないため、グローバル変数として登録させることはできません。そのため、グローバル変数の登録オプションをオフにします:

register_globals = オフ
もちろん、これが設定されている場合は、GET によって送信された変数 var を取得するなど、適切な方法を使用して対応する変数を取得する必要があります。 PHP プログラマは、これを取得するために $_GET['var'] を使用する必要があります。


(9) SQLインジェクションを防ぐためにmagic_quotes_gpcをオンにする

SQL インジェクションは、Web サイトのバックエンドに侵入したり、サーバー全体がダウンしたりする可能性がある非常に危険な問題です。

ので注意してください。 php.ini に次の設定があります:


magic_quotes_gpc = オフ


これはデフォルトではオフになっています。オンにすると、ユーザーが送信した SQL クエリが自動的に変換されます

たとえば、' を ' に変換するなど、SQL インジェクションの防止に重要な役割を果たします。したがって、次のように設定することをお勧めします:

magic_quotes_gpc = オン


(10) エラーメッセージ制御


一般に、php はデータベースに接続されていない場合、または他の状況下でエラーを要求します。一般に、
の場合、エラー メッセージには php スクリプトが含まれます。 以前のパス情報やクエリ SQL ステートメント、その他の情報は、この種の情報がハッカーに提供されると安全ではなくなるため、通常はサーバーでエラー プロンプトを無効にすることをお勧めします。

display_errors = Off エラー メッセージを表示したい場合は、警告の上の情報のみを表示するなど、表示エラーのレベルを必ず設定してください:

error_reporting = E_WARNING & E_ERROR もちろん、エラー プロンプトをオフにすることをお勧めします。

(11) エラーログ

サーバー操作の理由を見つけやすくするために、display_errors を閉じた後にエラー情報を記録することをお勧めします:

Log_errors = On 同時に、エラー ログが保存されるディレクトリも設定する必要があります。ルート Apache ログも一緒に保存することをお勧めします。

error_log = D:/usr/local/apache2/logs/php_error.log 注: このファイルは、Apache ユーザーとグループに書き込み権限を与えるために指定する必要があります。


/* すべての GET 変数をフィルタリングします */
foreach ($_GET as $get_key=>$get_var)
{
if (is_numeric($get_var)) {
$get[strto lower($get_key)] = get_int($get_var);
} その他 {
$get[strto lower($get_key)] = get_str($get_var);
}
}
/* すべての POST 変数をフィルターします */
foreach ($_POST as $post_key=>$post_var)
{
if (is_numeric($post_var))
{
$post[strto lower($post_key)] = get_int($post_var);
}
それ以外は
{
$post[strto lower($post_key)] = get_str($post_var);
}
}
/* フィルター関数 */
//整数フィルター関数
関数 get_int($number)
{
return intval($number);
}
//文字列フィルター関数
関数 get_str($string)
{
if (!get_magic_quotes_gpc())
{
リターン addslashes($string);
}
$string を返します;
}
?>

http://www.bkjia.com/PHPjc/629619.html

tru​​ehttp://www.bkjia.com/PHPjc/629619.html技術記事 php には 2 つのタイプのアンチインジェクションがあり、もう 1 つは、多くの cms と同様に、送信されたすべての変数を処理するものです。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。