Rub*_*ben 10 security hash bookmarklet csrf
我的书签可以从任何网站调用,基本上允许用户从远处向他的收藏中插入一行 - 如果他已登录.
现在我想为我的网站启用CSRF保护,因为书签基本上是非伪造的跨网站请求,我想到了我如何区别于伪造的.
这不是一个高安全性的环境,但我也对原则感兴趣.
我以为我有办法做到这一点,但后来意识到它有很多问题.
我根本没想到的一件事是Sripathi Krishnan建议使用iframe.
我没有指定我的用例,所以是的,iframe是上述问题的有效解决方案.
然而,实际上我的书签目前在运行时确实与网站进行了一些基本的交互(意味着表格已经存在,用户可以在网站DOM中更改他的选择,这应该改变表格).我已经准备好为我的用例解雇这个功能,如果事实证明,没有合理安全的方式来区分伪造的非伪造跨站请求 - 但我仍然对理论水平感兴趣.
在不删除伪造部分的情况下,您无法进行跨站点请求.但对于您的用例,我认为您不需要跨站点请求.
让我们假设您的服务允许用户为他希望的任何页面添加书签.bookmarklet的工作是将{url,title}保存到数据库中.同时,您希望防止恶意网站自动为登录用户保存网址.
以下是我要解决的问题 -
这或多或少是谷歌读者作为其书签的一部分.这是它的书签的代码 - 注意它没有任何标记
javascript:
var b=document.body;
var GR________bookmarklet_domain='http://www.google.com';
if(b&&!document.xmlVersion) {
void(z=document.createElement('script'));
void(z.src='http://www.google.com/reader/ui/link-bookmarklet.js');
void(b.appendChild(z));
}
else{}
编辑:您仍然可以支持与iframe方法的交互.bookmarklet在网站的上下文中执行,因此它可以访问DOM.您可以随意与网站进行互动.准备好保存后,打开Iframe.iframe将是一个只有一个保存按钮的排序确认屏幕.
诀窍是延迟iframe的创建.您只能在用户准备保存时创建iframe.