ホームページ  >  記事  >  バックエンド開発  >  PHP_PHP チュートリアルのセマンティック URL を介した Web サイト攻撃を防ぐ方法の共有

PHP_PHP チュートリアルのセマンティック URL を介した Web サイト攻撃を防ぐ方法の共有

WBOY
WBOYオリジナル
2016-07-21 15:24:28849ブラウズ

セマンティック URL 攻撃とは何ですか?

多くの攻撃者の主な動機は好奇心であり、セマンティック URL 攻撃はその好例です。このタイプの攻撃では、主に、何か興味深いものを発見することを期待して URL を編集します。

たとえば、ユーザー chris がソフトウェア内のリンクをクリックして http://example.org/private.php?user=chris ページに到達した場合、ユーザーの値を変更して内容を確認しようとするのは自然なことです。何が起こるのですか。たとえば、http://example.org/private.php?user=rasmus にアクセスして、他の人の情報を参照できるかどうかを確認する場合があります。 GET データの操作は POST データの操作よりもわずかに便利であるだけですが、その露出により、特に初心者の攻撃者にとってはより頻繁に攻撃されることになります。

ほとんどの脆弱性は、特に複雑な理由ではなく、見落としによって引き起こされます。多くの経験豊富なプログラマは、上記の URL を信頼することの危険性をすぐに認識していますが、多くの場合、他の人から指摘されるまでそれに気づきません。

セマンティック URL 攻撃や脆弱性がどのように見逃されるかをよりよく説明するために、Web メール システムを例に挙げます。このシステムの主な機能は、ユーザーがログインして自分の電子メールを表示することです。

ユーザーログインに基づくシステムには、パスワード取得メカニズムが必要です。通常のアプローチは、攻撃者が知りそうにない質問をすることです (コンピュータのブランドなど、ただし、ユーザーが質問を指定して自分で回答できる方がよいでしょう)。質問が正しく答えられた場合、新しい質問が行われます。登録したメールアドレスにパスワードが送信されます。

ウェブメール システムの場合、登録時にメール アドレスを指定できない場合があるため、質問に正しく回答したユーザーはメール アドレスの入力を求められます (このメールに新しいパスワードが送信されるときに、代替メール アドレス情報も収集されます)住所) 。次のフォームは、新しいメール アドレスを要求するために使用され、アカウント名はフォームの非表示フィールドに保存されます:

コードをコピー コードは次のとおりです:


新しいパスワードを送信するメール アドレスを指定してください:


< ;input type="submit" value="Send Password" />


どのアカウントのパスワードを含むすべての情報を取得することがわかります。リセットして、新しいパスワードの送信先となる電子メール アドレスを指定します。

ユーザーが (正しい質問に答えた後) 上記のフォームを参照できる場合、そのユーザーが chris アカウントの法的所有者であると考える理由があります。代替電子メール アドレスとして chris@example.org を指定した場合、送信後に次の URL にリダイレクトされます:

http://example.org/reset.php?user=chris&email=chris%40example.org

URL がブラウザ バーに表示されるので、ここまで進んだ人は誰でも、ユーザー変数とメール変数が何をするのかを簡単に確認できます。これに気付いたユーザーは、php@example.org が非常に素晴らしいアドレスであると考え、次のリンクにアクセスして試してみました:

http://example.org/reset.php?user= php&email=chris%40example。 org

reset.php がユーザーによって提供された情報を信頼する場合、これはセマンティック URL 攻撃の脆弱性です。この場合、システムは php アカウントの新しいパスワードを生成して chris@example.org に送信するため、chris は php アカウントを盗むことに成功します。

セッション追跡を使用すると、上記の状況を簡単に回避できます:
コードをコピーします コードは次のとおりです:

session_start();
$clean = array(); ;
$ email_pattern = '/^[^@s<>]+@([-a-z0-9]+.)+[a-z]{2,}$/i';
if (preg_match($email_pattern) , $_POST ['電子メール']))
{
$clean['電子メール'] = $_POST['電子メール']
$user = $_SESSION['ユーザー'] = md5(uniqid(rand); (), TRUE));
if ($_SESSION['verified'])
{
/* パスワードを更新 */
mail($clean['email'], '新しいパスワード', $new_password);
}
?>
上記の例では一部の詳細 (詳細な電子メール情報や妥当なパスワードなど) が省略されていますが、ユーザーが提供したアカウントに対する不信感を示しており、さらに重要なことに、ユーザーが質問に正しく答えたかどうかを保存するためにセッション変数が使用されています。 ($_SESSION['verified'])、および質問に正しく回答したユーザー ($_SESSION['user'])。この不信感こそが、アプリケーションの脆弱性を防ぐ鍵となります。

実際、次の原則を覚えておいてください。

ユーザー入力を信用しないでください (つまり、ユーザー入力の検出。書くのは面倒ですが、時間内に問題を解決する方が良いです!)

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/324280.html技術記事セマンティック URL 攻撃とは何ですか? 好奇心は多くの攻撃者の主な動機であり、セマンティック URL 攻撃はその好例です。このタイプの攻撃では主に、次の情報を検出するために URL を編集することが含まれます...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。