使用Google App Engine(GAE)阻止跨站点脚本的最简单方法(框架/库/调用)是什么?

时间:2010-10-24 11:32:19

标签: java google-app-engine xss

我想稍后存储然后以最小的努力安全地显示用户输入的内容(我的目标是一个不写一堆安全相关代码的Web应用程序)。

编辑:Google App Engine for Java

4 个答案:

答案 0 :(得分:1)

我自己也在处理同样的问题;但我还没有机会把它带到现实世界中;所以请记住,我的答案不是经过严格的测试。自行承担使用风险。

首先,您需要问问自己是否允许用户使用任何HTML标记。那么,例如,用户可以输入链接吗?如何制作粗体文字?

如果答案是否定的,则相当简单。以下是如何设置过滤器的想法:

http://greatwebguy.com/programming/java/simple-cross-site-scripting-xss-servlet-filter/

但就个人而言,我不喜欢第一个例子中使用的过滤器;我只是把它放在那里向你展示如何设置过滤器。

我建议使用此过滤器:

http://xss-html-filter.sourceforge.net/

基本上是这样的:

  1. 从第一个链接设置示例,让它正常工作
  2. 从第二个链接下载示例,将其放入您的项目中,以便您可以从代码中访问它。
  3. 重写cleanXSS方法以使用从第二个链接下载的内容。所以可能是这样的:

    private String cleanXSS(String value) {
        return new HTMLInputFilter().filter( input );
    }
    
  4. 如果您确实想要允许HTML(例如锚标记/等),那么看起来HTMLInputFilter具有允许这种情况的机制;但它没有记录,所以你必须自己查看代码或提供自己的过滤方法来解决它。

答案 1 :(得分:0)

  

用户输入的内容安全且省力(我的目标是使用Web应用程序而不是编写一堆与安全相关的代码)。

您需要编写多少与安全相关的代码取决于您有多大的风险(有多少人想要攻击您的网站,这与您网站的受欢迎程度有关)。

例如,如果你写一个公共记事本,总共有3个用户,你可以勉强达到最低限度,如果你的写作我们讨厌中国,伊朗和所有黑客/破解者应用程序处理价值1,000,000美元一小时和30亿用户的交易,你可能会更多的目标。

简单地说,您不应该信任来自应用程序外部的任何数据,包括来自数据存储区的数据。应该检查所有这些数据,这是你所期望的。

我没有针对XSS验证传入的Java字符串,但是删除HTML通常已经足够了,而且Jsoup看起来很有趣(参见Remove HTML tags from a String

另外要确保您应该确保输出您希望输出的内容而不是某些JavaScript。

答案 2 :(得分:0)

大多数模板引擎,包括django(与App Engine捆绑在一起),提供了逃避输出的功能,使其可以安全地以HTML格式打印。在较新版本的Django中,这是自动完成的,除非你告诉它不要;在0.9.6(仍然是webapp中的默认值)中,您将输出值传递给模板中的|escape

在输出上转义通常是执行此操作的最佳方式,因为这意味着您拥有原始未修改的文本;如果您稍后修改了转义或输出格式,您仍然可以格式化之前输入的文本。

答案 3 :(得分:0)

您还可以使用代理所有连接并阻止任何XSS尝试的服务。我只知道一个这样的服务 - CloudFlare(但这并不意味着没有其他类似的服务)。不幸的是,安全功能与Pro计划有关:(