繁体   English   中英

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

[英]What is the easiest way (framework/library/call) to prevent Cross Site Scripting using Google App Engine (GAE)?

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

编辑:适用于Java的Google App Engine

我自己正在处理同一问题; 但是我还没有机会将它发布到现实世界中; 因此请记住我的答案未经过战斗测试。 自行承担风险使用。

首先,您需要问问自己是否要允许用户使用任何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 ); } 

如果您确实希望允许HTML(例如锚标记/等),则HTMLInputFilter似乎具有允许该功能的机制; 但没有记录,因此您必须自己查看代码或提供自己的过滤方式来弄清楚。

轻松地安全地输入用户输入的内容(我的目标是不编写一堆与安全性相关的代码的Web应用程序)。

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

例如,如果您编写一个总共有3个用户的公共记事本,则可以逃脱最低限度的费用,但是如果您编写一个我们讨厌中国,伊朗和所有涉及价值$ 1,000,000交易的黑客/骇客应用程序,小时和30亿用户,您可能会成为目标。

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

我尚未针对XSS验证传入的Java字符串,但是删除HTML通常就足够了,而Jsoup对此很有趣(请参阅从String中删除HTML标记

同样要确保您应该确保输出的是您期望输出的内容,而不是某些JavaScript。

大多数模板引擎,包括django(与App Engine捆绑在一起),都提供了转义输出的功能,以使其可以安全地以HTML打印。 在较新版本的Django中,除非您不这样做,否则它将自动完成。 在0.9.6(仍然是webapp中的缺省设置)中,您将输出值传递给模板中的|escape

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

您还可以使用将代理所有连接并阻止任何XSS尝试的服务。 我只知道一个这样的服务-CloudFlare (但这并不意味着就没有其他这样的服务)。 不幸的是,安全功能包含在Pro计划中,该计划是付费的

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM