ホームページ バックエンド開発 PHPチュートリアル PHP のいくつかのセキュリティ設定 (最適化)

PHP のいくつかのセキュリティ設定 (最適化)

Jan 29, 2020 pm 01:38 PM
php

PHP のいくつかのセキュリティ設定 (最適化)

スクリプト言語と初期バージョンの設計に起因するさまざまな理由により、PHP プロジェクトには多くのセキュリティ リスクが存在します。構成オプションから、次の最適化を行うことができます。

1. PHP エラー出力をシールドします。

#/etc/php.ini (デフォルトの設定ファイルの場所) で、次の設定値を Off

display_errors=Off## に変更します。 #ハッカーによる関連情報の利用を防ぐため、エラー スタック情報を Web ページに直接出力しないでください。

正しいアプローチは次のとおりです:

トラブルシューティングを容易にするために、エラー ログをログ ファイルに書き込みます。

2. PHP バージョンをブロックします。

デフォルトでは、PHP バージョンは次のような戻りヘッダーに表示されます。

Response Headers X-powered-by: PHP/7.2.0

php.ini の次の設定値を Off

expose_php=Off

3 に変更します。グローバル変数を閉じます。

グローバル変数が有効になっている場合、フォームから送信された一部のデータは自動的にグローバル変数として登録されます。コードは次のとおりです。

<form action="/login" method="post">
<input name="username" type="text">
<input name="password" type="password">
<input type="submit" value="submit" name="submit">
</form>
ログイン後にコピー

グローバル変数が有効になっている場合、サーバー側の PHP スクリプトは $username と $password を使用してユーザー名とパスワードを取得できます。これにより、スクリプト インジェクションの大きな危険が生じます。

これを有効にする方法は、php.ini で次のように変更することです:

register_globals=On

パラメータは次のとおりです:

register_globals=Off

オフにすると、関連するパラメータは $_POST、$ からのみ取得できます。 _GET、$_REQUEST。

4. ファイル システムの制限

open_basedir を使用して、PHP がアクセスできるシステム ディレクトリを制限できます。

以下のスクリプトコード(hack.php)を制限なく使用すると、システムパスワードを取得できます。

<?php
echo file_get_contents(&#39;/etc/passwd&#39;);
ログイン後にコピー

設定すると、エラーが報告され、関連情報が表示されなくなり、システム ディレクトリ b が不正にアクセスされなくなります:

PHP Warning: file_get_contents(): open_basedir restriction in effect. File(/etc/passwd) is not within the allowed path(s): (/var/www) in /var/www/hack.php on line 3
Warning: file_get_contents(): open_basedir restriction in effect. File(/etc/passwd) is not within the allowed path(s): (/var/www) in /var/www/hack.php on line 3 PHP Warning: file_get_contents(/etc/passwd): failed to open stream: Operation not permitted in /var/www/hack.php on line 3
Warning: file_get_contents(/etc/passwd): failed to open stream: Operation not permitted in /var/www/hack.php on line 3
ログイン後にコピー

設定

open_basedir=/var/www
ログイン後にコピー

5. リモートリソースへのアクセスを禁止します。

allow_url_fopen=Off
allow_url_include=Off
ログイン後にコピー
その他のサードパーティ製セキュリティ拡張機能

6.Suhosin。

Suhosin は、PHP プログラムの保護システムです。これはもともと、PHP プログラムと PHP コアの既知または未知の欠陥からサーバーとユーザーを保護するために設計されました (非常に実用的で、いくつかの軽微な攻撃に耐えることができます)。スホシンには 2 つの独立したパーツがあり、別々に使用することも、組み合わせて使用​​することもできます。

最初の部分は、バッファ オーバーフローやフォーマット文字列の弱点に対処できる PHP コア用のパッチです (これは必須です!);

2 番目の部分は、強力な PHP 拡張機能 (拡張機能) です。モードは非常に優れており、インストールが簡単です...)、他のすべての保護手段を含みます。

拡張機能のインストール

wget http://download.suhosin.org/suhosin-0.9.37.1.tar.gz
tar zxvf suhosin-0.9.37.1.tar.gz
cd suhosin-0.9.37.1/
phpize
./configure  --with-php-config=/usr/local/bin/php-config
make
make install
在php.ini下加入suhosin.so即可
extension=suhosin.so
ログイン後にコピー

機能

●エミュレータ保護モード

# 2 つの関数 sha256() と sha256_file( ) を追加します。 PHP コア

# すべてのプラットフォーム、CRYPT_BLOWFISH を関数 crypt() に追加します

# phpinfo() ページの透過的保護をオンにします

## SQL データベース ユーザー保護 (テスト段階)

#実行時保護

#● 暗号化された cookie

● さまざまなタイプの組み込み脆弱性を防止 (リモート URL の組み込みは許可されていません (ハッキング/ホワイトリスト) ); アップロードされたファイルを含めることを許可しません; ディレクトリ トラバーサル攻撃を防ぎます)

# preg_replace() の禁止を許可します

# eval() 関数の禁止を許可します

#パス 無限再帰を防ぐために最大実行深度を構成します

##● ブラック リストとホワイト リストを構成する各仮想ホストをサポートします

## コード実行用に個別の関数のブラック リストとホワイト リストを提供します

## HTTP 応答の分割の脆弱性を防止します。

#● スクリプトによるmemory_limit オプションの制御を防止します。

#● 関数 extract()、import_request_vars() などの PHP スーパーグローバルを保護します。

● 新しい脆弱性を防止します。 mail() 関数 Line 攻撃

##● preg_replace() 攻撃の防止

#セッション保護

● セッション データの暗号化

##● 防止セッションがハイジャックされるのを防ぐ

##● 長すぎるセッション ID を防止する

##● 悪意のあるセッション ID を防止する

##SESSION 内のデータは、通常、サーバー上にクリア テキストで保存されます。ここで、$_SESSION はサーバー側で暗号化および復号されます。このようにして、セッション ハンドルが Memcache またはデータベースに保存されると、簡単には壊れなくなります。多くの場合、セッション データには機密フィールドが保存されます。

この機能はデフォルトで有効になっており、php.ini を通じて変更することもできます。

suhosin.session.encrypt = On
suhosin.session.cryptkey = zuHywawAthLavJohyRilvyecyondOdjo
suhosin.session.cryptua = On
suhosin.session.cryptdocroot = On
;; IPv4 only
suhosin.session.cryptraddr = 0
suhosin.session.checkraddr = 0
ログイン後にコピー

Cookie Encryption

クライアントのブラウザの Cookie によって送信される HTTP ヘッダーもクリア テキストです。 Cookie を暗号化することで、

Cookie 改ざんなどのさまざまな攻撃からアプリケーションを保護できます。攻撃者は、他の妥当な Cookie 値を推測してプログラムを攻撃しようとする可能性があります。

アプリケーション全体での Cookie の使用: 不適切に構成されたアプリケーションは、同じセッション ストレージを持つ可能性があります。たとえば、デフォルトでは、すべてのセッションが /tmp ディレクトリに保存されます。あるアプリケーションからの Cookie は、別のアプリケーションで再利用されることはありません。暗号化キーが異なる限り。

php.ini での Cookie 暗号化設定:

suhosin.cookie.encrypt = On
;; the cryptkey should be generated, e.g. with &#39;apg -m 32&#39;
suhosin.cookie.cryptkey = oykBicmyitApmireipsacsumhylWaps1
suhosin.cookie.cryptua = On
suhosin.cookie.cryptdocroot = On
;; whitelist/blacklist (use only one)
;suhosin.cookie.cryptlist = WALLET,IDEAS
suhosin.cookie.plainlist = LANGUAGE
;; IPv4 only
suhosin.cookie.cryptraddr = 0
suhosin.cookie.checkraddr = 0
Blocking Functions
测试
##默认PHP的Session保存在tmp路径下
ll  -rt /tmp | grep sess
##扩展未开启时查看某条sesson的数据
cat  sess_ururh83qvkkhv0n51lg17r4aj6
//记录是明文的
##扩展开启后查看某条sesson 的数据
cat  sess_ukkiiiheedupem8k4hheo0b0v4
//记录是密文的
可见加密对安全的重要性
ログイン後にコピー

ブロッキング機能

Whitelist

##显式指定指定白名单列表
suhosin.executor.func.whitelist = htmlentities,htmlspecialchars,base64_encode
suhosin.executor.eval.whitelist = htmlentities,htmlspecialchars,base64_encode
<?php
echo htmlentities(&#39;<test>&#39;);
eval(&#39;echo htmlentities("<test>");&#39;);
ログイン後にコピー

Blacklist

##显式指定指定黑名单列表
suhosin.executor.func.blacklist = assert,unserialize,exec,popen,proc_open,passthru,shell_exec,system,hail,parse_str,mt_srand
suhosin.executor.eval.whitelist = assert,unserialize,exec,popen,proc_open,passthru,shell_exec,system,hail,parse_str,mt_srand
通过日志来查看非法调用黑白名单
suhosin.simulation = 1
suhosin.log.file = 511
suhosin.log.file.name = /tmp/suhosin-alert.log
ログイン後にコピー
その他の設定項目
suhosin.executor.include.max_traversal    扩目录的最大深度,可以屏蔽切换到非法路径
suhosin.executor.include.whitelist        允许包含的URL,用逗号分隔
suhosin.executor.include.blacklist        禁止包含的URL,用逗号分隔
suhosin.executor.disable_eval = On        禁用eval函数
suhosin.upload.max_uploads
suhosin.upload.disallow_elf
suhosin.upload.disallow_binary
suhosin.upload.remove_binary
suhosin.upload.verification_script        上传文件检查脚本,可以来检测上传的内容是否包含webshell特征
ログイン後にコピー

使用Suhosin,你可以得到一些错误日志,你能把这些日志放到系统日志中,也可以同时写到其他任意的日志文件中去;

它还可以为每一个虚拟主机创建黑名单和白名单;

可以过滤GET和POST请求、文件上载和cookie;

你还能传送加密的会话和cookie,可以设置不能传送的存储上线等等;

它不像原始的PHP强化补丁,Suhosin是可以被像Zend Optimizer这样的第三方扩展软件所兼容的。

更多相关php知识,请访问php教程

以上がPHP のいくつかのセキュリティ設定 (最適化)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Dec 24, 2024 pm 04:42 PM

PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

今まで知らなかったことを後悔している 7 つの PHP 関数 今まで知らなかったことを後悔している 7 つの PHP 関数 Nov 13, 2024 am 09:42 AM

あなたが経験豊富な PHP 開発者であれば、すでにそこにいて、すでにそれを行っていると感じているかもしれません。あなたは、運用を達成するために、かなりの数のアプリケーションを開発し、数百万行のコードをデバッグし、大量のスクリプトを微調整してきました。

PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 Dec 20, 2024 am 11:31 AM

Visual Studio Code (VS Code とも呼ばれる) は、すべての主要なオペレーティング システムで利用できる無料のソース コード エディター (統合開発環境 (IDE)) です。 多くのプログラミング言語の拡張機能の大規模なコレクションを備えた VS Code は、

JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 Apr 05, 2025 am 12:04 AM

JWTは、JSONに基づくオープン標準であり、主にアイデンティティ認証と情報交換のために、当事者間で情報を安全に送信するために使用されます。 1。JWTは、ヘッダー、ペイロード、署名の3つの部分で構成されています。 2。JWTの実用的な原則には、JWTの生成、JWTの検証、ペイロードの解析という3つのステップが含まれます。 3. PHPでの認証にJWTを使用する場合、JWTを生成および検証でき、ユーザーの役割と許可情報を高度な使用に含めることができます。 4.一般的なエラーには、署名検証障害、トークンの有効期限、およびペイロードが大きくなります。デバッグスキルには、デバッグツールの使用とロギングが含まれます。 5.パフォーマンスの最適化とベストプラクティスには、適切な署名アルゴリズムの使用、有効期間を合理的に設定することが含まれます。

PHPでHTML/XMLを解析および処理するにはどうすればよいですか? PHPでHTML/XMLを解析および処理するにはどうすればよいですか? Feb 07, 2025 am 11:57 AM

このチュートリアルでは、PHPを使用してXMLドキュメントを効率的に処理する方法を示しています。 XML(拡張可能なマークアップ言語)は、人間の読みやすさとマシン解析の両方に合わせて設計された多用途のテキストベースのマークアップ言語です。一般的にデータストレージに使用されます

母音を文字列にカウントするPHPプログラム 母音を文字列にカウントするPHPプログラム Feb 07, 2025 pm 12:12 PM

文字列は、文字、数字、シンボルを含む一連の文字です。このチュートリアルでは、さまざまな方法を使用してPHPの特定の文字列内の母音の数を計算する方法を学びます。英語の母音は、a、e、i、o、u、そしてそれらは大文字または小文字である可能性があります。 母音とは何ですか? 母音は、特定の発音を表すアルファベットのある文字です。大文字と小文字など、英語には5つの母音があります。 a、e、i、o、u 例1 入力:string = "tutorialspoint" 出力:6 説明する 文字列「TutorialSpoint」の母音は、u、o、i、a、o、iです。合計で6元があります

PHPでの後期静的結合を説明します(静的::)。 PHPでの後期静的結合を説明します(静的::)。 Apr 03, 2025 am 12:04 AM

静的結合(静的::) PHPで後期静的結合(LSB)を実装し、クラスを定義するのではなく、静的コンテキストで呼び出しクラスを参照できるようにします。 1)解析プロセスは実行時に実行されます。2)継承関係のコールクラスを検索します。3)パフォーマンスオーバーヘッドをもたらす可能性があります。

PHPマジックメソッド(__construct、__destruct、__call、__get、__setなど)とは何ですか? PHPマジックメソッド(__construct、__destruct、__call、__get、__setなど)とは何ですか? Apr 03, 2025 am 12:03 AM

PHPの魔法の方法は何ですか? PHPの魔法の方法には次のものが含まれます。1。\ _ \ _コンストラクト、オブジェクトの初期化に使用されます。 2。\ _ \ _リソースのクリーンアップに使用される破壊。 3。\ _ \ _呼び出し、存在しないメソッド呼び出しを処理します。 4。\ _ \ _ get、dynamic属性アクセスを実装します。 5。\ _ \ _セット、動的属性設定を実装します。これらの方法は、特定の状況で自動的に呼び出され、コードの柔軟性と効率を向上させます。

See all articles