我已经在我的网站上使用CSRF令牌在我的表单中的隐藏输入字段中实现了CSRF保护。但是,在我的网站的某些地方,我不会使用表单来执行某些操作,例如:用户可以点击链接删除某些内容(例如/post/11/delete
)。目前这对CSRF攻击是开放的,所以我想对这些链接实施预防。我怎样才能做到这一点?我可以想到两种可能的方式:
我不喜欢其中任何一个选项:
那么我有什么方法可以忽略或者是我的两种选择吗?
答案 0 :(得分:2)
在您的链接中添加token。
样式提交看起来像链接并不难。虽然中间点击或“复制链接位置”命令会出现问题。明显。
facebook / google并不害怕在网址中加入“随机字符串”。你也不应该。 (在这些链接中添加nofollow,并在robots.txt中排除它们可以解决您对SEO的担忧。这是因为您出于某种原因向访客用户/搜索引擎显示REST链接)。
答案 1 :(得分:1)
如果您确实不希望URL参数具有较长的随机值,则可以为每个“删除”操作实现确认页面,并在其中显示包含隐藏字段的表单。 在/ post / 11 / delete时收到的请求没有有效令牌将使服务器响应确认页面。 使用有效令牌在/ post / 11 / delete处收到的请求将触发删除。
答案 2 :(得分:0)
最佳做法是不通过GET操作执行更新。
这是一个聪明的小脚本,它将挂钩所有链接,并使它们除了查询字符串中的有效内容之外还有一个隐藏变量。希望这有用!
document.ready = function () {
var makeLinkPost = function(link) {
var handleClick = function(event) {
event.preventDefault();
$("<form action='" + this.href + "' method='POST'><input type='hidden' value='CSRF'/></form>'").appendTo("body").submit();
}
$(link).click(handleClick);
}
$("a").each(function() {
makeLinkPost(this);
})
}