偽造鏈接,勾引用戶點(diǎn)擊,或是讓用戶在不知情的情形下拜訪 偽造表單,引誘用戶提交。表單可以是隱藏的,用圖片或鏈接的形式偽裝。 結(jié)構(gòu)表單
比較常見而且也很便宜的防范手腕是在所有可能波及用戶寫操作的表單中加入一個(gè)隨機(jī)且變換頻繁的字符串,而后在處理表單的時(shí)候?qū)@個(gè)字符串進(jìn)行檢查。這個(gè)隨機(jī)字符串假如和當(dāng)前用戶身份相關(guān)系的話,那么攻擊者偽造請(qǐng)求會(huì)比較麻煩。 <?php if(Crumb::verifyCrumb($uid, 捏造跨站懇求先容 隨機(jī)串代碼實(shí)現(xiàn) 在表單中插入一個(gè)隱蔽的隨機(jī)串crumb 代碼中的$uid表示用戶唯一標(biāo)識(shí),而$ttl表示這個(gè)隨機(jī)串的有效時(shí)間。 -->對(duì)crumb進(jìn)行檢討 <form method="post" action="demo.php"> <input type="hidden" name="crumb" value="<?php echo Crumb::issueCrumb($uid)?>"> <input type="text" name="content"> <input type="submit"> </form> <?php class Crumb { CONST SALT = "your-secret-salt"; static $ttl = 7200; static public function challenge($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 } 偽造跨站請(qǐng)求介紹 偽造跨站請(qǐng)求比擬難以防備,而且迫害宏大,攻打者可以通過這種方法惡作劇,發(fā)spam信息,刪除數(shù)據(jù)等等。這種襲擊常見的表示形式有: 運(yùn)用示例 處理表單 demo.php yahoo應(yīng)付偽造跨站請(qǐng)求的辦法是在表單里加入一個(gè)叫.crumb的隨機(jī)串;而facebook也有類似的解決辦法,它的表單里常常會(huì)有post_form_id和fb_dtsg。 咱們按照這個(gè)思路,山寨一個(gè)crumb的實(shí)現(xiàn),代碼如下: 相關(guān)的主題文章:
|