ホームページ  >  記事  >  php教程  >  スクリプトセキュリティの本質_PHP MYSQL ページ 1/3

スクリプトセキュリティの本質_PHP MYSQL ページ 1/3

WBOY
WBOYオリジナル
2016-06-13 12:26:52953ブラウズ

問題の存在についての序文
コード レベル、つまりアプリケーション レベルから (つまり、基礎となる言語自体の脆弱性を考慮せずに) コード セキュリティを考慮すると、スクリプトのセキュリティ問題は次のようになります。関数と変数の問題。変数は、直接的または間接的にユーザーから安全でない入力を受け取ります。PHP 自体の特性により、この種の変数の混乱は PHP で発生しやすくなります (多くの PHP プログラムは、変数の定義、初期化、受け取りに使用されますが、これらの変数は変数の定義、初期化、受け取りに使用されます)。 $id などの変数の初期化は PHP の設定によって完全に完了します。注意しないと変数が混乱して攻撃につながる可能性があります。
変数が安全でない入力を受け取り、適切なフィルタリングなしでさまざまな場所で使用されると、さまざまな害を引き起こす可能性があります。データベースに直接入力してユーザーに表示すると、クロスサイト スクリプティング攻撃が発生します。SQL ステートメントで使用すると、SQL インジェクション攻撃が発生する可能性があります。これらの攻撃は、特定のスクリプトとは関係ありません。さまざまなスクリプト言語がすべて存在する可能性があります。 PHP 変数は非常に柔軟であるため、これらの有害な変数が一部の論理ステートメントで使用されると、認証失敗などの重要なコードのスキップや一部の変数の初期化のスキップが発生し、プログラム ロジックの混乱やその他の脆弱性が発生します。この変数が include などの危険な関数で使用された場合、fopen 関数で使用された場合はファイル インクルードの脆弱性が発生し、mysql_query 関数で使用された場合はファイル書き込みの脆弱性が発生する可能性があります。 SQL インジェクションの脆弱性、eval および preg_replace はコードの実行につながる可能性があり、htmlspecia 関数に出現するとエラーが発生する可能性があり、絶対パス リーク変数が出現する環境によってその可能性のある害が決まります。
問題の存在を考えた後、この種の脆弱性をコードレベルから確認するにはどうすればよいでしょうか?もちろん、PHP 言語に精通することが最も基本です。また、危険な関数に変数がある場合は、その変数のソース、正しく初期化されているか、機密文字を扱うことができるかどうかを把握する必要があります。初期化後にユーザーによって挿入されたこれらの機密文字は、関数に入る前に完全に消去されているかどうか。コードレビュー作業の難しさは、変数のソースを特定することにある可能性があります。これには、PHP の機能とレビューしているコードに精通している必要がありますが、変数のすべてのソースが明確に表示されるわけではなく、一部の初期化コードは、実行したときほど明確ではない場合があります。想像力を働かせて実行してください。変数内の一部は、取得したくない場所から取得されている可能性があります。また、一部の変数は、データベースまたはシステム構成ファイルから取得されている可能性がありますが、データベースと構成ファイルには、または、これらの変数は後で安全に操作されず、信頼できません。次にスクリプトコードの安全性を変数と関数の考え方に従って考えていきます。
2 変数はどこから来たのでしょうか?
1 表示された入力
変数はどこから来たのか? 実際、Web だけで考えた場合、どのような Web サイトが最も安全なのでしょうか。明らかに、静的な Html ページのみを提供する Web サイトが最も安全です。そのような Web サイトは、密閉された銀行を強盗するようなものですが、大規模なフォーラムやスクリプトの場合は実現が困難です。ログインするときは、ユーザー名やパスワードなどの変数をサーバーに渡す必要があります。これは、サーバーとの対話をキャプチャするプロセスによってもたらされます。投稿を投稿すると、プログラムによってキャプチャされます。送信されたフォームやアドレス バーのパラメータなど、ブラウザとサーバー間のデータ送信が表示される可能性がありますが、表示できないものには Cookie が含まれます。 、HTTP ヘッダーはすべて送信されたデータ、つまり変数です。これらの場所は、サーバーがデータを処理するための本来の入り口でもあります。では、PHP プログラムはどのようにして変数を受け入れるのでしょうか?送信されたすべての変数は、
$_GET
$_POST
$_COOKIE
$_FILES
$_SERVER
を含む、PHP によっていくつかの配列に保存されます。初期の利便性と柔軟性のために、このような配列があります。 PHP 設定のオプション
register_globals
このオプションがオンの場合、上に表示される変数は $GLOBALS のメンバーになり、スクリプト内で取得せずに直接使用でき、変数_順序
。多くのプログラムは register_globals がオフであるとみなしているため、プログラムの初期化時に次のコードを使用します。
@extract(daddslashes($_GET)); register_globals の役割も果たし、POST と GET の内容をグローバル変数として解放しますが、後述するように危険性がより大きくなる可能性があります。

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