2012-07-12 42 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