セキュリティの問題は、プログラミング言語で考慮すべき重要な部分です。ほとんどすべての実際の言語は、セキュリティを確保するためにいくつかの関数、モジュール、またはその他の機能を提供します。現代のインターネットでは、多くの場合、世界中のユーザーから入力データを取得する必要があります。ただし、「ユーザーが入力したデータを決して信頼してはいけない」ことは誰もが知っています。そのため、さまざまな Web 開発言語では、ユーザー入力データのセキュリティを確保するための機能が提供されています。今回は、最も有名なオープンソース言語である PHP で提供されている機能を見ていきます。
PHP には、Web サイトで SQL インジェクション攻撃や XSS 攻撃などの問題を防ぐのに役立つ、非常に便利な関数がいくつかあります。 PHP でプロジェクトのセキュリティを確保できる関数を見てみましょう。以下にリストされている関数は、プロジェクトに役立つと私が判断した関数だけであり、完全ではない可能性があります。
1. mysql_real_escape_string()
この関数は、PHP での SQL インジェクション攻撃を防ぐのに非常に役立ち、一重引用符や二重引用符などの特殊文字に「バックスラッシュ」を追加します。すでにクエリに安全に使用できます。ただし、この機能はデータベースに接続しているときに使用することに注意してください。
しかし、現在では mysql_real_escape_string() 関数は基本的に必要なくなりました。つまり、すべての新しいアプリケーション開発では、データベースを操作するために既製のステートメントを使用する必要があります。
2.addslashes()
この関数は上記の mysql_real_escape_string() と非常に似ています。ただし、設定ファイルphp.iniのmagic_quotes_gpcの値が「on」の場合は、この機能を使用しないように注意してください。デフォルトでは、magic_quotes_gpc はオンになっており、すべての GET、POST、COOKIE データに対して addlashes() が自動的に実行されます。二重エスケープになるため、magic_quotes_gpc によってエスケープされた文字列に対して addslashes() を使用しないでください。この変数の値は、PHP の get_magic_quotes_gpc() 関数を通じて確認できます。
3. htmlentities()
この関数は、ユーザー入力データをフィルタリングするのに非常に便利です。たとえば、ユーザーが文字「<」を入力すると、この関数によって HTML エンティティ < に変換されるため、XSS および SQL インジェクション攻撃が防止されます。
4. htmlspecialchars()
HTML の一部の文字には特別な意味があり、そのような意味を反映したい場合、この関数は変換された文字列を返します。アンプは「&」に変換されます。
5.strip_tags()
もちろん、この関数の 2 番目のパラメーターを設定することで、文字列からすべての HTML、JavaScript、および PHP タグを削除することもできます。
6. md5()
一部の開発者は非常に単純なパスワードを保存しますが、これはセキュリティの観点からは良くありません。これは、指定された文字列列の 32 文字の md5 ハッシュを生成します。このプロセスは不可逆的です。つまり、md5() の結果から元の文字列を取得することはできません。
7. sha1()
この関数は上記の md5() に似ていますが、異なるアルゴリズムを使用し、40 文字の SHA-1 ハッシュを生成します (md5 は 32 文字のハッシュを生成します)。
8. intval()
笑わないでください、これが安全関連の関数ではなく、変数を整数型に変換していることは承知しています。ただし、この関数を使用すると、特に ID や年齢などのデータを解析する場合に、PHP コードの安全性を高めることができます。