PHP セキュリティ開発: 偽のクロスサイトリクエストを防ぐためにランダム文字列検証を追加_PHP チュートリアル

WBOY
リリース: 2016-07-21 15:12:56
オリジナル
1009 人が閲覧しました

Yahoo の偽のクロスサイトリクエストに対処する方法は、.crumb と呼ばれるランダムな文字列をフォームに追加することです。Facebook にも同様の解決策があり、そのフォームには post_form_id と fb_dtsg が含まれることがよくあります。

一般的で安価な防止方法は、ユーザーの書き込み操作が含まれる可能性のあるすべてのフォームにランダムで頻繁に変更される文字列を追加し、フォームの処理時にこの文字列をチェックすることです。このランダムな文字列が現在のユーザー ID に関連付けられている場合、攻撃者にとってリクエストを偽造するのはさらに困難になります。現在の予防法は基本的にこの方法に基づいています

ランダム文字列コードの実装
このアイデアに従い、crumbの実装をコピーします。コードは次のとおりです:

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

class Crumb {
CONST SALT = "あなたの秘密の塩";                                                            
静的 $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);   
}
static public function verifyCrumb($uid, $crumb, $action = -1) {
$i = ceil(time() / self::$ttl);                                                                              
if(substr(self::challenge($i . $action . $uid), -12, 10) == $crumb ||
substr(self::challenge(($i - 1) . $action . $ uid), -12, 10) == $crumb)
trueを返します。                                                                                       
false を返します。   
}

コード内の
$uid はユーザーの一意の識別子を表し、$ttl はこのランダムな文字列の有効時間を表します。

応用例

フォームを構築する
非表示のランダム文字列のくずをフォームに挿入する


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

I & lt; input type = "submit" & gt;
& lt;/form & gt; (Crumb::verifyCrumb($uid, $_POST['crumb'])) {
//通常のプロセスに従ってフォームを作成します
} else {
//クラム検証に失敗し、エラー プロンプト プロセス
}


この記事は Baozi ブログからのものです
http://www.bkjia.com/PHPjc/326620.html
www.bkjia.com

tru​​e

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

技術記事

Yahoo が偽のクロスサイトリクエストに対処する方法は、.crumb と呼ばれるランダムな文字列をフォームに追加することです。Facebook にも同様の解決策があり、そのフォームには post_form_id と fb_dtsg が含まれることがよくあります。 ...

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のおすすめ
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!