2012-07-12 45 views
0

我讀了一些PHP PDO數據消毒,來到翻過這篇文章:

PDO & Sanitize Date/Remove HTML

我相信,我的代碼使用PDOStatement對象bindParam來防止SQL注入,但是我讀這條評論(轉述)

「使用$ _ POST代幣將有助於避免CSRF」

,我很好奇,什麼是象徵性的意思,我如何實現它?

+3

@Melvin OP問一個非常具體的問題,你所能提供的只是一個隱藏在URL縮短服務後面的「CSRF」的LMGTFY? – brezanac 2012-07-12 22:53:16

+0

CRSF是一個非常具體的主題,搜索谷歌不僅會給你深入的信息,而且還會教你如何保護你的表格。海報只是對如何實現它感到好奇,他沒有任何麻煩實際執行它,這正是您可以輕鬆地在互聯網上輕鬆找到的那種信息。以維基百科爲例,我確定它將進入搜索結果的前三名,它涵蓋了幾乎所有你需要知道的理解CSRF背後的概念。我也可以在這裏放棄維基百科鏈接,但我認爲這更合適。 – Melvin 2012-07-12 23:29:02

+0

我的問題更多的是'什麼是令牌',而不是真正的CRSF – 2012-07-12 23:36:32

回答

0

令牌可能是一些散列,您將它存儲在會話中,並通過表單發送。 前驗證表單數據你是否:

  1. 令牌已經sended和
  2. 令牌存儲在會話

一個簡單實現:


<?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'; 
    } 
    } 
?> 

+1

以及如何防止跨站點腳本?我只是想了解它,而不只是接受它:) – 2012-07-12 22:48:36

+0

CSRF不是跨站腳本,請參閱http://en.wikipedia.org/wiki/Cross-site_request_forgery。簡單的例子:假設你已經登錄了,並且有一個簡單的註銷頁面。如果沒有令牌,任何人都可以在任何頁面上放置表單或鏈接,當您使用它時,您已註銷(當然,「攻擊者」不會告訴您註銷)。 – 2012-07-12 23:00:21

+0

請參閱以下示例:http://tinkerbin.com/YCzOopQN – 2012-07-12 23:42:04