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

Java 使用Google App Engine(GAE)防止跨站点脚本编写的最简单方法(框架/库/调用)是什么?,java,google-app-engine,xss,Java,Google App Engine,Xss,我希望存储用户输入的内容,然后在以后安全地显示,只需很少的努力(我的目标是一个web应用程序,而不是编写一堆与安全相关的代码) 编辑:Google App Engine for Java 用户以最小的努力安全地输入内容(我的目标是一个web应用程序,而不是编写一堆与安全相关的代码) 您需要编写多少与安全相关的代码取决于您的风险有多大(有人想要攻击您的站点的可能性有多大,这本身与您的站点的受欢迎程度有关) 例如,如果你写了一个公共记事本,总共有3个用户,你可以不受任何限制,但是如果你写了一个我们讨

我希望存储用户输入的内容,然后在以后安全地显示,只需很少的努力(我的目标是一个web应用程序,而不是编写一堆与安全相关的代码)

编辑:Google App Engine for Java

用户以最小的努力安全地输入内容(我的目标是一个web应用程序,而不是编写一堆与安全相关的代码)

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

例如,如果你写了一个公共记事本,总共有3个用户,你可以不受任何限制,但是如果你写了一个我们讨厌中国、伊朗和所有黑客/黑客的应用程序,每小时处理价值1000000美元的交易和30亿用户,你可能更像一个目标

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

我没有针对XSS验证传入的Java字符串,但是删除HTML通常已经足够好了,Jsoup对此看起来很有趣(请参阅)


还要确保输出的是您希望输出的内容,而不是一些JavaScript。

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

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

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

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

我建议使用此过滤器:

所以基本上:

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

    private String cleanXSS(String value) {
        return new HTMLInputFilter().filter( input );
    }
    

  • 如果您确实希望允许HTML(例如锚定标记/etc),那么看起来HTMLInputFilter具有允许此操作的机制;但是它没有文档记录,所以您必须自己查看代码或提供自己的过滤方式来解决它。

    大多数模板引擎,包括django(与App Engine捆绑在一起)都提供了转义输出的功能,以确保以HTML打印的安全性。在较新版本的Django中,这是自动完成的,除非您告诉它不要这样做;在0.9.6中(仍然是webapp中的默认设置),您将输出值传递到模板中的
    | escape


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

    您还可以使用代理所有连接并阻止任何XSS尝试的服务。我只知道一种类似的服务(但这并不意味着没有其他类似的服务)。不幸的是,付费的Pro plan提供了安全功能:(

    我确实发现谷歌推荐JSTL,但如果有人有一些好文章/博客帖子,这会很有帮助……伙计……这个问题怎么一年都没有得到回答?