需要帮助确定ESAPI.validator()和ESAPI.encoder()

时间:2016-06-30 15:49:43

标签: esapi

我们正在我们的网站上实施应用程序安全性。它是一个基于REST的应用程序,所以我将不得不验证整个请求有效负载,而不是每个属性。需要针对所有类型的攻击(SQL,XSS等)验证此有效负载。浏览时我发现人们正在使用ESAPI进行网络安全。

我对ESAPI库的ESAPI.validator().getValidXXXESAPI.encoder() Java API感到困惑。这两者之间有什么区别以及何时使用哪种API。我还想知道在什么情况下我们可能会使用两个API

根据我的理解,我可以使用两个API对输入进行编码以形成有效的html 例如:

  1. ESAPI.encoder().encodeForHTML(input);
  2. ESAPI.validator().getValidSafeHTML(context, input, maxLength, allowNull)
  3. 对于XSS攻击,我使用java pettern& matcher对strip-of html标签进行了代码更改,但我想使用ESAPI实现相同的功能。有人可以帮助我如何实现它。

    或者

    是否有为websecurity开发的类似于ESAPI的新java插件,我没有遇到过。我找到了https://jsoup.org/,但它只解决了XSS攻击,我正在寻找一个为多次攻击提供API的库(SQL注入/ XSS)

1 个答案:

答案 0 :(得分:1)

ESAPI.encoder().encodeForHTML(input);

您在向浏览器发送输入时使用此功能,以便您发送的数据会针对HTML进行转义。这可能会变得棘手,因为你必须知道这些确切的数据是否是例如,在被渲染成HTML之前传递给javascript。或者,如果它被用作HTML属性的一部分。

我们使用:

ESAPI.validator().getValidSafeHTML(context, input, maxLength, allowNull).

当我们想要从客户端获取“安全”HTML时,它由反讽政策文件支持,该文件准确描述了我们将从用户接受的HTML标记和HTML属性的类型。默认为拒绝,因此您必须明确告知策略文件,如果您接受:

<a href="www.someurl.com">text</a>

您需要指定您想要“a”标记,并且您将允许“href”属性,甚至可以针对文本字段和标记属性中的内容指定进一步的规则。

如果您的应用程序需要接受来自用户的HTML内容,您只需要“getValidSafeHTML”...这在大多数企业应用程序中通常是似是而非的。 (Myspace曾经允许这样做,结果就是Samy蠕虫。)

通常,在内容进入应用程序时使用验证器API,在将内容引导回用户或后端解释器时使用编码器API。 AntiSamy不再受支持,因此如果您需要“安全的HTML”解决方案,请使用OWASP的HTML Sanitizer.

  

是否为websecurity开发了类似的新插件   我没有来过的ESAPI。我找到了https://jsoup.org/,   但它只解决了XSS攻击,我正在寻找一个库   为几种攻击提供API(SQL注入/ XSS)

尝试类似安全性的唯一另一个是HDIV。这是answer that compares HDIV to ESAPI by an HDIV developer.

*免责声明:我是ESAPI开发人员和OWASP成员。

旁注:我不鼓励使用Jsoup,因为默认情况下它会改变传入数据,构建“最佳猜测”(无效)解析树,并且不允许您对该行为进行细粒度控制...意思是,如果有一个实例,你要覆盖并强制执行某种特定的策略Jsoup asserts that it is always smarter than you are ......而事实并非如此。