最近、私は PHP のセキュリティ問題に注目するようになりましたが、多くの国内開発者、特に PHP 初心者は、機能が実装されているかどうかだけで満足しており、表面をなぞっただけ、あるいは無関心であることがよくあります。セキュリティについての議論。この結果は、SQL インジェクションの蔓延や、データベース接続ファイルの直接ダウンロードなど、深刻です。この記事は、Cal Evans が DevZone で公開した一連のトピック「PHP Security Tip (セキュリティに関するアドバイス/ヒント)」を翻訳したものです。これは最新の記事ではありませんが、言及されている原則的な事項や古典的な実践の多くは依然として注目に値します。間違いなく読む価値のある優れた記事であり、これがすべての人に役立つことを願っており、適切なセキュリティ意識を確立し、 を理解することができます。必要な対策。 記事に私の理解と注釈が加えられている箇所は注記しています。不適切な点があればご指摘ください。ありがとうございます
、原書には合計 21 件の提案があり、これは翻訳の上部です。
PHP セキュリティのヒント #1
Cal Evans (編集者) 2 コメント 2007 年 3 月 1 日木曜日
セキュリティの特効薬をお探しですか?悪い知らせはありません。今月、セキュリティには大きな取り組みではなく、さまざまな小さな取り組みが必要です。 DevZone の特集「今週のセキュリティ ヒント」を開始するために、3 月中は毎日 1 つずつ投稿していきます。これらのヒントには、具体的に実行できる内容もあれば、知っておく必要がある一般的な概念も含まれます。どれも簡単なので、これ以上コメントすることはせずに、最初の「今週のセキュリティに関するヒント」を紹介します。
コメント
メーリングリスト
1:17PM UTC · ロブ [未登録]
関連するメーリング リストに参加することをお勧めします。PHP の新しいリリースのお知らせリストは以下にあります。
http://www.php.net/mailing-lists.php
----------------------------------------------- ----------------------------------
PHP セキュリティのヒント 1
セキュリティの特効薬を探しているなら (西方キリスト教の言い伝えでは、悪霊 (吸血鬼?狼男) を殺すことができるのは心臓への特効薬だけです) フレッド ブルックスのソフトウェア エンジニアリングに関する有名な本『マン ムーン』では。 「Myth」と「No Silver Bullet」では、ますます大規模化するソフトウェア開発プロジェクトを制御不能な怪物に例え、悪魔を完全に殺す特効薬のようにこの問題を完全に解決できる技術の存在を期待しています。 (編集者注)悪い知らせがありますが、特効薬はありません。セキュリティの問題は、単一の大きな問題として解決するのではなく、継続的な取り組みと多くの些細な作業を必要とします。今月は、その手始めとして、DevZone で 1 つの提案を開始します。毎日投稿されます。ヒントの中には、実行できる具体的な内容もあれば、注意が必要な一般的な概念も含まれます。すべてのヒントは短いので、早速、最初の「今週の安全に関するヒント」から始めましょう。 。
コメント:
メーリングリスト
関連するメーリング リストに参加すると、次のアドレスで PHP リリース ニュースの最新のお知らせリストを見つけることができます。
http://www.php.net/mailing-lists.php----------------------------------------------- ----------------------------------
PHP セキュリティのヒント #2
Cal Evans (編集者) 3 コメント 2007 年 3 月 2 日金曜日
隠蔽によるセキュリティはまったくセキュリティではありません。一方、今日のヒントは単純なものですが、運用環境では見落とされがちです。
エラーが表示されたり、サイトに関する情報が漏洩する可能性がないよう注意してください。
運用サーバーの php.ini で display_errors = Off を設定するだけで、侵入者にシステムの構造に関するヒントを与える可能性のある情報の漏洩を防ぐことができます。
デフォルトでは、display_errors = On です。
詳細情報とエラー報告オプションについては、マニュアルの「エラー処理およびログ機能の概要」セクションを参照してください。----------------------------------------------- ----------------------------------
PHP セキュリティのヒント #2
セキュリティを確保するために隠された情報を使用することは、基本的にセキュリティの役割を果たすことはできません (隠蔽によるセキュリティはまったくセキュリティではありません)。その一方で、サイト情報を漏洩したくありません。
今日のアドバイスはシンプルですが、実稼働環境では無視されることがよくあります。
サイトに関するエラー メッセージや漏洩の可能性のある情報を表示しないようにしてください
運用サーバーのphp.iniでdisplay_errors = Offを設定するだけで、システム構成情報の漏洩や侵入者による悪用を防ぐことができます。デフォルト設定は、display_errors = オンです。
詳細情報とエラー報告オプションについては、マニュアルの「エラー処理およびログ機能の概要」セクションを参照してください。
----------------------------------------------- ----------------------------------
PHP セキュリティのヒント #3
Cal Evans (編集者) コメント1件 2007年3月5日月曜日
セキュリティを意識するのは良いことですが、それだけでは問題は解決しません。開発者はセキュリティに関して注意する必要があります。それでも一人ではできません。今日のセキュリティに関するヒントは、このことを思い出させます。
アプリケーションには、これまでに公開されていないセキュリティ脆弱性が潜んでいる可能性があるため、新たな視点をもたらし、見落とされている弱点を見つけるために、サードパーティのセキュリティ ソフトウェアまたはサービスを検討する必要があります。
開発者は、アプリケーションのセキュリティの脆弱性を見つけるのに役立つツールをツールボックスに入れておく必要があります。 Chorizo などのツールは、コードの自動スキャンを実行することで役立ちます。 PHPSecInfo のようなプログラムは、環境が適切に構成されていることを確認するのに役立ちます。
これらのツールや他のスキャンツールを使用することだけがセキュリティを確保するためのものではありません。ただし、それらはミックスの重要な部分です。 信頼できるプロジェクトとベンダーに、安全なアプリケーションの構築と保守を支援してもらいましょう。
----------------------------------------------- -------------------------------
PHP安全建议#3
有安全意识是一件好事,但其本身不解决问题,在安全问题上开発行者必须時刻保持警惕,尽管那样还是不足够有,今天的安全建议给你提个醒:
民間のアプリケーションにはこれまでに発生した安全上の問題が多数存在する可能性があるため、サードパーティの安全なデバイスまたはサービスを使用すると、アプリケーションが安全に監視され、監視の不足を発見することができます。
一般的なツールボックスは、公開者として、アプリケーションプログラムの安全な問題を検出するのに役立つツールを備えています。Chorizo のようなツールは、自動的に転送されるコードを検出して、PHPSecInfo のようなプログラムが環境を保護することができます。の正しい構成。安全性を確保するために、これらのツールやその他のツールを使用することは禁止されていますが、それらは、さまざまな組み合わせの実施において重要な部分です。
----------------------------------------------- -------------------------------
PHP セキュリティのヒント #4
Cal Evans (編集者) 7 コメント 2007年3月6日火曜日
「あいまいさによるセキュリティはまったくセキュリティではありません。」という格言があります。 しかし、コインの裏を返せば、全体的な戦略の一部として使用される場合、無名性は良いことになります。悪意のある人にとって物事をこれ以上容易にすることは意味がありません。それでは、今日のセキュリティに関するヒントを紹介します。
重要な情報を含むファイルやフォルダーにはデフォルト以外の名前を付けます。
アプリケーションを安全に保つために、あいまいな名前に依存しないでください。常にアクセス許可を確認し、テスト ツールを使用して脆弱性をテストし、ログ ファイルに不審なアクティビティがないか常に監視する必要があります。ただし、アプリケーションや Web サイトを設計するときは、悪い人が悪いことをしやすくしないようにしてください。ファイルやディレクトリにはデフォルト名や一般的な名前を使用しないでください。
共有したいセキュリティのヒントはありますか?研究を通じて集めたセキュリティの真実の塊ですか、それとも人生の苦難の学校ですか?ログインして、右上隅にある投稿ボタンをクリックしてください。
----------------------------------------------- -------------------------------
PHP安全建议#4
正に谚语の说、「安全を保護するために隐藏情報を使用することは根本的に安全効果をもたらすことはできない(隠蔽によるセキュリティは全く安全ではない。)」、しかし一方では、隐藏情報は安全全体としての役割を果たしている
不要な計画は、アプリケーションとウェブサイトの安全性を維持するために、色褪せた命名に依存しており、これを定期的に検査し、検査ツールを使用して問題を検査し、アクティブであると疑われる日報ファイルを保持しています。心のある人が便利な会議を提供しています。ファイルやアイテムには、承認された、または一般的な命名を使用する必要はありません。
你是不是也有想要分享的安全小建议呢? 得られた黄金信条の研究を通じて、また、生活里碰钉子の後の经验教训ですか?
----------------------------------------------- -------------------------------
PHP セキュリティのヒント #5
Cal Evans (編集者) コメント1件 2007年3月7日水曜日
PHPのセキュリティは、プログラマがアプリケーションのパラメータの外側で考えることを必要とする継続的な使命です。最近では、「これは私がやりたいことをやっているだろうか?」と心の中で考えるだけでは十分ではありません。また、「ユーザーは他に何にそれを使用できますか? それを許可したいですか?」ということも考慮する必要があります。 今日のセキュリティに関するヒントは、すべてのプログラマーが毎日暗唱する必要があることわざです。
ユーザーを決して信用しないでください。
悲しい現実ですが、ユーザーは悪です。ユーザーは、アプリケーションを悪用する方法を見つけることだけを望んでいます。油断して「私は小さなぬいぐるみしか売ってないのに、ユーザーは本当に邪悪な存在なのだろうか?」と考え始めるとすぐに、あなたは戦いに負けました。
わかりました、それほど悲惨ではないかもしれませんが、一部のユーザーには注意を払う必要があります。そこで、すべてのプログラマーが毎日暗唱すべき 2 番目のことわざが登場します。
フィルタ入力、エスケープ出力
はい、FIEO (OK、GIGO ほどクールな響きではありません) は、セキュリティを重視するすべてのプログラマーが実践している信条の 1 つです。
----------------------------------------------- -------------------------------
PHP安全建议#5
PHP安全は一つの持続的な任務です、它要求程序员思考应用程序パラメータ外面の情况、现在、光是想着“它(应用程序)了做我想让它做的事吗?”你必须同時「人们余能用它来干什么和我允许他们这样做吗?」今天的安全建议是一全程序员必须每天背诵的格言:
永続不要相信用户。(ユーザーを決して信用しない)
用户是邪恶的,尽管就现实生活来说是很悲哀的事情,他们千方百计就為破解你的应用程序,只要你掉以轻心然后这样想着:「我不过是兜售一点喂饱了的小動物」 「しかし、(公開アプリケーション プログラムの 1 つであり、質問者は)、私たちのユーザーはこれほど邪悪な能力を持っていますか?」、那你はこの音声を受信しました。
良いですね、このような恐怖のない状況も許容しますが、一部のユーザーは常に警鐘を鳴らす必要があります。
过滤输入、编码输出力(フィルタ入力、エスケープ出力)そうです、FIFO(好吧、その配信音はGIGO那么酷)、これはすべての安全性を保証するプログラムの生存のための悪魔の一つです。
----------------------------------------------- -------------------------------
PHP セキュリティのヒント #6
Cal Evans (編集者) 5 コメント 2007年3月8日木曜日
PHP で安全なアプリケーションを作成するというトピックには、優れた PHP コードを作成するだけではありません。ほとんどのアプリケーションは、何らかのデータベースを利用します。 多くの場合、アプリケーション全体に影響を及ぼす脆弱性は、SQL コードを構築するときに発生します。今日の Tip of the Day では、開発者が実装できる 1 つの簡単なソリューションを取り上げます。
SQL クエリで数値を扱うときは、常にキャストします。
入力をフィルタリングしている場合でも、SQL ステートメント内のすべての数値をキャストするのが簡単で優れた安全対策です。たとえば、次のコードを考えてみましょう。
$myId = filter_var($_GET['id'],FILTER_VALIDATE_INT);
$sql = 'SELECT * FROM table WHERE id = '.$myId;
PHP 5.2 に組み込まれているネイティブ PHP フィルターを適用しているとしても、追加でできることがあります。代わりにこれを試してください。
$myId = filter_var($_GET['id'],FILTER_VALIDATE_INT );
$sql = 'SELECT * FROM table WHERE id = '.(int)$myId;
この最後の変数の int へのキャストにより、何が MySQL に渡されるかについての疑問が解消されます。上の例は意図的に簡略化されています。実際の状況では、コードはより複雑になり、エラーが発生する可能性がはるかに高くなります。 select ステートメントの構築時に最後のキャストを適用することにより、アプリケーションにもう 1 レベルの安全性が追加されます。
----------------------------------------------- -------------------------------
PHP安全建议#6
编写安全な PHP アプリケーションプログラムの袜不止编写良好な PHP 代コード、大部分のアプリケーションが都市部または那珂地でデータベースに使用されており、建立 SQL コードの実行中に、全体的なアプリケーションの安全上の問題も発生
SQL で数値を処理する場合、投射(cast)
を実行する必要があります
次の列のコードに示すように、SQL 句にすべての数値型の値を投影するのが、単純かつ優れた安全対策です。$myId = filter_var($_GET['id'],FILTER_VALIDATE_INT);
$sql = 'SELECT * FROM table WHERE id = '.$myId;
PHP5.2 に組み込まれているネイティブ PHP フィルターを使用している場合でも (最新の PHP マニュアルを参照してください (一部の古い中国語版の PHP マニュアルにはこの章がありません)、「データ フィルタリング」セクション、翻訳者の注記)。その他のこと。これを次の文に変更してみてください:
$myId = filter_var($_GET['id'],FILTER_VALIDATE_INT );
$sql = 'SELECT * FROM table WHERE id = '.(int)$myId;
最終モデル (最終キャスト) では、変数は整数型 (int) にキャストされ、Mysql に渡される内容についての疑問はすべて解消されます。実際の状況では、コードはより単純化されています。これはより複雑であり、最終モデルに依存して select ステートメントを構築すると、コードのセキュリティ保護がさらに強化されます。