我读了一些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