如何保护网页按钮不被XSS自动点击

前言 XSS自动点按钮有什么危险? 在社交网络中,通过单击按钮(例如发布消息)启动许多操作。如果消息系统具有XSS漏洞,则除了攻击之外,用户还可以发布XSS。——它可以自动填写邮件内容,然后单...

前言 XSS自动点按钮有什么危险? 在社交网络中,通过单击按钮(例如发布消息)启动许多操作。如果消息系统具有XSS漏洞,则除了攻击之外,用户还可以发布XSS。——它可以自动填写邮件内容,然后单击发布按钮发送带有恶意代码的邮件。在朋友们看到这一举动后,他们将其传播给了他们的朋友。从而形成蠕虫传播。 那么,是否有一种“发布消息”的机制由用户的“真正点击”按钮完成,这个按钮不能由脚本自动实现?这将减缓蠕虫的传播。 实现 这个想法似乎不起作用。如果您发布包含用户行为信息的消息,XSS可以伪造后端无法识别的行为数据。 除非用户点击按钮,否则会生成“特殊数据”,让后端验证它。 但是,XSS也可以直接调用button元素的click方法,因此效果与用户单击相同。后端仍然无法识别,是脚本点,还是用户指向的。 在这种情况下,我们只能保护这个“按钮元素”,以便XSS无法访问它。例如,将它放在不同来源的iframe中,因此它与XSS所在的环境隔离开来! 但是,这还不够。如果XSS破解具有此“特殊数据”生成规则,那么您可以自己伪造一个,然后直接调用HTTP接口发布消息。因此,我们必须找到一个不能伪造的硬标记。 实际上,有一种非常简单的方法:我们只是让HTTP请求也通过iframe发送。这样,后端可以使用引用来检测请求是否是由iframe发起的。毕竟,XSS不能伪造一个引用者! 示范 演示: http://www.etherdream.com/FunnyScript/anti-xssworm/ 注意:这种情况不是要看你是否可以注入XSS,而是看你是否可以通过当前页面的JS自动发送消息! 此外,不计算通过第三方服务器发布。这很简单,省略了登录状态;在现实世界中,会话cookie是HttpOnly并且不能由JS获取,因此它不能被第三方服务器取代。 详情: 1.用户加载  safebutton.js,引入  SafeButton 类 2.用户实例化  SafeButton 对象A,创建一个不同的源iframe作为按钮接口 3.用户单击iframe按钮后,内部变量S设置为true,单击消息将发送到主页面(postMessage)。 4.在主页面上收到消息后,让A生成  onclick 事件。 5.用户通过A的 发送 方法将HTTP请求数据抛出到iframe。 6.  iframe检查内部变量S:如果为true,则通过AJAX发送数据;否则就放弃了 7. 服务器检查referer:如果是iframe的地址,继续业务逻辑;否则就放弃了 8.在iframe收到AJAX返回后,将结果抛出到主页面。 9. A产生一个带有HTTP返回结果的  onreceive 事件 第6号中的步骤是最关键的。正是这一步使得XSS无法在没有用户点击的情况下强制抛出iframe! ##缺陷 当然,这种解决方案无法阻止点击劫持。—— XSS可以将iframe元素放大到整个页面并将其设置为完全透明。 以这种方式,用户可以点击页面上的任何位置,并且iframe的S状态变为真,从而可以绕过No.6。 结束 当然,安全防御总比没有好。并且程序转换的成本不是很大,后端只是增加了一个引用判断;前端也只需要修改个别按钮,如发布按钮,就像按钮不需要保护一样。 *作者:EtherDream 黑客业务列表介绍和一般分类: 类别:攻击入侵破解开发 1:攻击业务订单:暂时取消所有此类业务订单[仅销售常规IDC流量] 2:入侵业务清单:包括网站源代码,办公系统,黑色系统,教育系统等。 3:破解业务类:软件,加密文件,二次打包,脱壳等。 4:二次开发业务清单:软件二次开发,源代码二次开发等 5:其他业务订单:特洛伊木马[通过所有防病毒],远程控制,特殊软件等 备注:未提及的业务订单可根据主要类别查询或直接联系客户服务。为避免浪费双方时间,请在咨询前阅读:业务交易流程及相关说明 注意:仅接受正式业务,个人无权接受。收集此内容。