我已经阅读了很多篇文章,介绍了使用htmlspecialchars和regexs,白名单/黑名单以及使用html过滤脚本(如HTML Purifier,HTMLawed等)等功能来防止用户提交的HTML内容中的XSS攻击的方法。
不幸的是,这些都没有解释像eBay这样的网站如何能够容纳如此大量的潜在恶意HTML标记,例如<link>
,<script>
,<object>
和CSS样式以及HTML属性,例如background:url()等。似乎它们允许用户在项目描述中提交几乎任何内容。我在项目描述中看到了一些最精细的HTML,Javascript和Flash模板。
eBay的做法有何不同?是否存在我缺少的另一种技术或层,它允许它们阻止XSS攻击,同时仍然允许在用户的项目描述中包含几乎任何内容?
任何想法或对此的见解将不胜感激!
答案 0 :(得分:11)
当你拥有一大批程序员和一个装满钱的战队时,这很容易。
这不是火箭科学。他们确定了一个漏洞案例,并且可能通过前端的Regex和Javascript对其进行编码以及进行大量的后端验证,以确保数据在插入之前不会受到损害。我们应该做的一切都是一样的,除了对于Ebay而言,它比我们大多数人的工作要成熟得多,而且FAR更大。
如果它像我以前工作的银行一样,他们有一个PAS团队,致力于寻找生产中的细微错误,与工程师打开门票,并优先遵循这个过程。在开发人员,测试人员,质量管理人员和PAS之间,没有理由会出现漏洞,但如果漏洞发生,应该迅速作出反应。
如果您计划走这条路,您应该考虑采取“渐进增强”的方法来应对这一挑战。首先阻止javascript打开。然后,通过您认为安全的方法增强允许--some--并且只允许在您继续时保证安全。继续这个过程允许越来越多,同时捕获边缘情况,因为它们出现在测试或生产中。渐渐地,你将从允许阻止的内容中迁移出来。虽然这应该是毫无疑问的,但即便是最先进的公司也会错过生命周期管理和改进的基本概念。
话虽这么说,在尝试清理输入时,最好将前端和后端验证方法结合起来。前端为客户提供更直观的快速反馈,但与saavy用户可以克服任何客户端语言一样。后端验证是您的防火墙,确保任何滑过前端的内容都得到适当处理。您的数据库是您的生命线,所以不惜一切代价保护它!
除非你有一支军队和一个庞大的预算,否则试图为像CMS那样广泛的东西编写每个边缘案例的代码,这样就可以获得近乎全权的投入,这几乎总会导致失败的金融风险。
答案 1 :(得分:2)
我花了一些时间,我能够alert(document.cookie)
- 他们的黑名单显然试图阻止的东西 - 建立在这里列出的一个多年的利用:
http://menno.b10m.net/blog/blosxom.cgi/web/ebay-xss.html
我实际上没有发布这个列表,所以我只能肯定地说这可以在列表预览模式下使用。
如果这是任何迹象,那么您的问题的答案是:ebay并不真正阻止xss攻击。他们有一些黑名单,但他们似乎很容易逃避。
编辑:我似乎已经在我的易趣上“关于我”页面上工作了,一个真实的实时页面。长话短说,ebay尝试过滤XSS似乎非常可怜。
答案 2 :(得分:1)
虽然我不能肯定地说,有很多技术可以提供帮助。 这项工作的主要组成部分是拥有一个活跃且可用的安全+开发部门。
虽然他们肯定有一个过滤机制,但代码可能在模拟器中进行评估,并根据某些标准(如可疑内容,混淆等)进行评级。
然后,还有Mechanical Turk方面,亚马逊正在疯狂地使用(基本上,他们使用“廉价劳动力”人类来智能地判断某些东西)。