ホームページ  >  記事  >  バックエンド開発  >  PHP_PHP チュートリアルでの偽のクロスサイトリクエストを防ぐためのヒント

PHP_PHP チュートリアルでの偽のクロスサイトリクエストを防ぐためのヒント

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

偽のクロスサイト リクエストの概要
偽のクロスサイト リクエストを防ぐのは難しく、攻撃者がこの方法を使用していたずら、スパム メッセージの送信、データの削除などを行う可能性があります。この攻撃の一般的な形式は次のとおりです:
ユーザーにクリックさせるための偽のリンク、またはユーザーが知らないうちにアクセスできるようにする
ユーザーを送信させるための偽のフォーム。フォームを非表示にしたり、画像やリンクに見せかけたりすることができます。
一般的で安価な防止方法は、ユーザーの書き込み操作が含まれる可能性のあるすべてのフォームにランダムで頻繁に変更される文字列を追加し、フォームの処理時にこの文字列をチェックすることです。このランダムな文字列が現在のユーザー ID に関連付けられている場合、攻撃者にとってリクエストを偽造するのはさらに困難になります。
偽のクロスサイトリクエストに対処する Yahoo の方法は、フォームに .crumb と呼ばれるランダムな文字列を追加することです。Facebook にも同様の解決策があり、そのフォームには post_form_id と fb_dtsg が含まれることがよくあります。
ランダム文字列コードの実装
このアイデアに従って、パンくずの実装をコピーします。コードは次のとおりです:

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

class Crumb {
CONST SALT = "your-secret -salt";
static $ttl = 7200;
static public functionChallenge($data) {
return hash_hmac('md5', $data, self::SALT);
static public function issueCrumb($uid, $action = -1) {
$i = ceil(time() / self::$ttl);
return substr(self::challenge($i . $action . $uid), -12, 10);
} 静的パブリック関数 verifyCrumb($uid, $crumb, $action = -1) {
$i = ceil(time() / self::$ttl); ::challenge($i . $action . $uid), -12, 10) == $crumb ||
substr(self::challenge(($i - 1) . $action . $uid), -12, 10) == $crumb)
return true;
}
} コード内の


$uid はユーザーの一意の識別子を表し、$ttl はこのランダムな文字列の有効時間を表します。
応用例
フォームの構築
非表示のランダム文字列くずをフォームに挿入



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




フォームdemo.phpを処理
パンくずを確認


コードをコピー
コードは以下の通りです if (Crumb::verifyCrumb($uid, $_POST['crumb'])) {
//通常のプロセスに従ってフォームを処理します
} else {
//Crumb 検証に失敗しました、エラープロンプトプロセス
}
?>



http://www.bkjia.com/PHPjc/324311.html
www.bkjia.com

tru​​e

技術記事偽のクロスサイト リクエストの概要: 偽のクロスサイト リクエストは防ぐのが難しく、攻撃者がこの方法を使用していたずら、スパム メッセージの送信、データの削除などを行う可能性があります。この種の攻撃はよくあることです...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。