我讀了一些PHP PDO數據消毒,來到翻過這篇文章:
PDO & Sanitize Date/Remove HTML
我相信,我的代碼使用PDOStatement對象bindParam來防止SQL注入,但是我讀這條評論(轉述)
「使用$ _ POST代幣將有助於避免CSRF」
,我很好奇,什麼是象徵性的意思,我如何實現它?
我讀了一些PHP PDO數據消毒,來到翻過這篇文章:
PDO & Sanitize Date/Remove HTML
我相信,我的代碼使用PDOStatement對象bindParam來防止SQL注入,但是我讀這條評論(轉述)
「使用$ _ POST代幣將有助於避免CSRF」
,我很好奇,什麼是象徵性的意思,我如何實現它?
令牌可能是一些散列,您將它存儲在會話中,並通過表單發送。 前驗證表單數據你是否:
一個簡單實現:
<?php
session_start();
if(!isset($_SESSION['token']))
{
$_SESSION['token']=uniqid();
}
?>
<form method="post">
<input name="token" type="hidden" value="<?php echo $_SESSION['token'];?>">
<input name="something" value="some data to send">
<input type="submit">
</form>
<?php
if(isset($_POST['something']))
{
if(!isset($_POST['token']) || $_POST['token']!==$_SESSION['token'])
{
echo 'missing a valid token';
}
else
{
echo 'got a valid token, I will use the data';
}
}
?>
以及如何防止跨站點腳本?我只是想了解它,而不只是接受它:) – 2012-07-12 22:48:36
CSRF不是跨站腳本,請參閱http://en.wikipedia.org/wiki/Cross-site_request_forgery。簡單的例子:假設你已經登錄了,並且有一個簡單的註銷頁面。如果沒有令牌,任何人都可以在任何頁面上放置表單或鏈接,當您使用它時,您已註銷(當然,「攻擊者」不會告訴您註銷)。 – 2012-07-12 23:00:21
請參閱以下示例:http://tinkerbin.com/YCzOopQN – 2012-07-12 23:42:04
@Melvin OP問一個非常具體的問題,你所能提供的只是一個隱藏在URL縮短服務後面的「CSRF」的LMGTFY? – brezanac 2012-07-12 22:53:16
CRSF是一個非常具體的主題,搜索谷歌不僅會給你深入的信息,而且還會教你如何保護你的表格。海報只是對如何實現它感到好奇,他沒有任何麻煩實際執行它,這正是您可以輕鬆地在互聯網上輕鬆找到的那種信息。以維基百科爲例,我確定它將進入搜索結果的前三名,它涵蓋了幾乎所有你需要知道的理解CSRF背後的概念。我也可以在這裏放棄維基百科鏈接,但我認爲這更合適。 – Melvin 2012-07-12 23:29:02
我的問題更多的是'什麼是令牌',而不是真正的CRSF – 2012-07-12 23:36:32