1

我想我了解 CSRF 以及使用表单键如何防止这种情况发生,但这仅对来自表单的 POST 数据有用,对吧?在我的网站中,我让登录用户通过单击删除按钮删除一些项目,该按钮将它们发送到 delete.php?id={item_id}。

在 delete.php 上,我检查该项目是否属于用户,如果是,则脚本将其删除。如何阻止其他网站发布类似 www.mysite.com/delete.php?id=3 的链接。我知道在我的情况下攻击者将不得不猜测 id。

但一般来说,如何停止 CSRF 以获取 GET 数据或 url 中的数据?

另外,攻击者使用 img 标签或锚标签进行 CSRF 之间有什么区别,它们与 Get 和 Post 数据有什么关系?

非常感谢您,我将非常感谢您对此的任何建议。

4

2 回答 2

1

$_POST和之间的预期差异的一个很好的例子$_GET$_GET应该用于读取数据,而$_POST应该用于对其进行操作。您可以使用带有一个提交按钮的表单而不是链接,并将您的令牌作为隐藏输入。如果需要,您甚至可以使用CSS将按钮设置为看起来像链接的样式。

于 2013-06-08T18:26:19.520 回答
1

扩展我的评论,

假设您正在使用 cookie/会话来跟踪用户登录。只需在哈希上再次 md5 并让您确认。

if (isset($_GET['delete'] && md5($_COOKIE["PHPSESSID"])==$_GET['confirm'])) {
    //delete something
}

然后对于 HTML,您可以声明:

<a href="www.mysite.com/delete.php?id=3&confirm=<?php echo md5($_COOKIE["PHPSESSID"]);?>">Delete</a>
于 2013-06-08T18:27:44.210 回答