ホームページ > バックエンド開発 > PHPの問題 > php は SQL インジェクション攻撃をどのように防ぐのでしょうか?

php は SQL インジェクション攻撃をどのように防ぐのでしょうか?

王林
リリース: 2023-02-24 07:28:02
オリジナル
3105 人が閲覧しました

php は SQL インジェクション攻撃をどのように防ぐのでしょうか?

サーバー側の構成

セキュリティ、PHP コードの作成は 1 つの側面であり、PHP 構成は非常に重要です。
PHP を手動でインストールしました。PHP のデフォルト設定ファイルは /usr/local/apache2/conf/php.ini にあります。最も重要なことは、PHP をより安全に実行できるように php.ini の内容を設定することです。 。 PHP全体のセキュリティ設定は主にphpshellやSQLインジェクションからの攻撃を防ぐためのものですが、ゆっくり解説していきます。まず、編集ツールを使用して /etc/local/apache2/conf/php.ini を開きますが、他の方法でインストールした場合は、設定ファイルがこのディレクトリに存在しない可能性があります。

(1) PHP のセーフ モードをオンにする
php のセーフ モードは、system()、At などの PHP の一部の関数を制御できる非常に重要な組み込みセキュリティ メカニズムです。同時に、多くのファイル操作関数のアクセス許可が制御され、/etc/passwd などの特定の重要なファイルは許可されません。ただし、デフォルトの php.ini ではセーフ モードが開きません。開いてみましょう:

safe_mode = on
ログイン後にコピー

(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) オフにする危険な機能について
if セーフモードがオンになっている場合は機能の禁止は必要ありませんが、安全性を考慮しております。たとえば、system() や phpinfo() などのコマンドを実行できる PHP 関数や、PHP 情報を表示できるその他の関数を実行したくない場合は、次のように禁止できます。

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 ヘッダー内の PHP バージョン情報の漏洩を阻止します。 http ヘッダー内の情報の漏洩 ヘッダー内:

expose_php = Off
ログイン後にコピー

たとえば、ハッカーが www.12345.com 80 に Telnet した場合、PHP 情報を見ることはできません。

(8) グローバル変数の登録をオフにする
PHP で送信された変数 (POST または GET を使用して送信された変数を含む) は、グローバル変数として自動的に登録され、直接アクセスできるようになります。サーバーは非常に安全ではないため、グローバル変数として登録させることはできません。そのため、グローバル変数の登録オプションをオフにします。

register_globals = Off
ログイン後にコピー

もちろん、このように設定されている場合は、次のようにする必要があります。対応する変数を取得するときに使用します。GET で送信された変数 var を取得するなどの合理的な方法で、$_GET['var'] を使用して取得します。PHP プログラマはこの点に注意してください。

(9) SQL インジェクションを防ぐために magic_quotes_gpc をオンにする
SQL インジェクションは非常に危険な問題であり、Web サイトのバックエンドに侵入したり、サーバー全体がダウンしたりする可能性があるため、注意してください。 。 php.ini には次の設定があります:

magic_quotes_gpc = Off
ログイン後にコピー

これはデフォルトではオフになっています。オンにすると、' を \' に変換するなど、ユーザーが送信した SQL クエリが自動的に変換されます。 SQL インジェクションの防止に重要な役割を果たします。したがって、次のように設定することをお勧めします:

magic_quotes_gpc = On
ログイン後にコピー

(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用户的和组具有写的权限。
MYSQL的降权运行
新建立一个用户比如mysqlstart

net user mysqlstart fuckmicrosoft /add
net localgroup users mysqlstart /del
ログイン後にコピー

不属于任何组
如果MYSQL装在d:\mysql ,那么,给 mysqlstart 完全控制 的权限
然后在系统服务中设置,MYSQL的服务属性,在登录属性当中,选择此用户 mysqlstart 然后输入密码,确定。
重新启动 MYSQL服务,然后MYSQL就运行在低权限下了。
如果是在windos平台下搭建的apache我们还需要注意一点,apache默认运行是system权限
这很恐怖,这让人感觉很不爽.那我们就给apache降降权限吧。

net user apache fuckmicrosoft /add
net localgroup users apache /del
ログイン後にコピー

ok.我们建立了一个不属于任何组的用户apche。
我们打开计算机管理器,选服务,点apache服务的属性,我们选择log on,选择this account,我们填入上面所建立的账户和密码,
重启apache服务,ok,apache运行在低权限下了。
实际上我们还可以通过设置各个文件夹的权限,来让apache用户只能执行我们想让它能干的事情,给每一个目录建立一个单独能读写的用户。
这也是当前很多虚拟主机提供商的流行配置方法哦,不过这种方法用于防止这里就显的有点大材小用了。 

推荐视频教程:PHP视频教程

以上がphp は SQL インジェクション攻撃をどのように防ぐのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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