2016-01-13 120 views
1

每次用戶加載頁面時,我們是否可以通過使用會話來防止XSS攻擊?我可以通過使用會話阻止XSS攻擊嗎?

這是我的PHP代碼。

session_start(); 

if (isset($_GET["content"]) && isset($_GET["session"] && isset($_SESSION["code"])) { 
    if ($_SESSION["code"] == $_GET["session"]) { 
     echo $_GET["content"]; 
    } 
} 

$code = rand(1000, 9000); 

$_SESSION["code"] = $code; 

echo(str_replace("{CODE}", $code, $html); 

例如,這是URL

http://example.com/index.php?content=xxxxx&session=GENERATED_SESSION 

凡GENERATED_SESSION是我的JavaScript代碼中添加的代碼。

這是一個會被iframe加載多次的頁面,該代碼可以阻止XSS?

回答

3

我認爲你試圖阻止CSRF(跨站點請求僞造)而不是XSS(跨站點腳本)。

XSS正在阻止人們將惡意代碼注入到應用程序中,例如,如果你有一個評論表單的博客,有人可以在你的評論框中輸入JS <script></script>標籤,這樣當他們的評論加載到你的博客上時,JS就會被執行。

您的方法是防止CSRF的常用方法(雖然我不確定JS進入它的位置)。

生成一個'不可猜測'的標記並存儲在會話中,該標記的值呈現在表單中的隱藏表單元素中,當某人提交表單時,應檢查隱藏字段與會話中的值相匹配,完全如您所願(沒有語法錯誤:))。

我個人會使用更好的機制來生成令牌,因爲您生成的隨機數可能會被「省掉」。

在附註上,通常應該只對搜索/讀取請求使用GET方法,所以CSRF保護不會真正保護任何內容,而且還需要考慮用戶刷新搜索時會發生什麼。

每當你改變某些東西(即創建,更新或刪除)時,最好使用POST表單方法,但同樣適用CSRF原則。