Web applications 使用';%';使用ESAPI安全筛选器作为通配符

Web applications 使用';%';使用ESAPI安全筛选器作为通配符,web-applications,wildcard,esapi,client-side-attacks,Web Applications,Wildcard,Esapi,Client Side Attacks,我们在应用程序中使用ESAPI安全层。我们还设计了一个“%”字符用于从浏览器端传递的通配符搜索。这是一个糟糕的选择,并且作为遗留设计继续使用,以便轻松构建要在后端运行的sql 现在,输入中的“%”字符被ESAPI验证程序拒绝,以防止双重编码攻击。我们正在积极寻求将“%”替换为“*”之类的内容。但在此期间,为了允许使用“%”进行通配符搜索,我们正在权衡以下选项: 1) 关闭ESAPI规范化程序。(坏主意,留下了双重编码的漏洞。) 2) 在安全层中,将所有“%”替换为筛选器通过之前的某个不太可能的字

我们在应用程序中使用ESAPI安全层。我们还设计了一个“%”字符用于从浏览器端传递的通配符搜索。这是一个糟糕的选择,并且作为遗留设计继续使用,以便轻松构建要在后端运行的sql

现在,输入中的“%”字符被ESAPI验证程序拒绝,以防止双重编码攻击。我们正在积极寻求将“%”替换为“*”之类的内容。但在此期间,为了允许使用“%”进行通配符搜索,我们正在权衡以下选项:

1) 关闭ESAPI规范化程序。(坏主意,留下了双重编码的漏洞。)

2) 在安全层中,将所有“%”替换为筛选器通过之前的某个不太可能的字符。然后换回去。(人们对此有不同的看法;一些人认为这就像没有双重编码攻击的防御一样好,另一些人认为它有一些价值。)

3) 在前端应用程序中,允许用户输入“%”,但在提交到服务器之前用“*”替换它们。将需要在DAO层中再次将“*”作为“%”进行操作。将需要在所有可以接受通配符输入的UI代码中进行最多的代码更改

我想邀请大家回答如何最好地解决这个问题。谢谢你的帮助

这是一个差劲的选择,并作为遗留设计延续下来,以方便用户使用 构造要在后端上运行的sql

这向我表明,您的根本问题不是
MixedEncodingException
,而是它的SQL注入。(SQLi)

重写后端上的查询以使用
PreparedStatements
。防止注入攻击的唯一有保证的解决方案是为正确的上下文正确编码。由于您使用用户输入来帮助构造SQL查询,因此正确的上下文是SQL

MixedEncodingException
而言,您的最佳选择是选项3。你可以用HTML编码你的百分比。用
%更改
%

但请记住,攻击者可以看到您在客户机上进行的任何转换,我将尝试使用此线程。首先修复SQLi,以后再担心混合编码。

您能提供更多关于哪些类型的字符是合法的输入吗?字母数字字符串(以字母开头)是搜索数据的规则。对于通配符搜索,我们允许在任意位置使用任意数量的百分比字符。嗯。。。如果是字母数字,且仅以字母开头。。。这听起来像是ESAPI编解码器中的一个bug。您能分享一些有问题的输入吗?这不是SQL注入问题。参数已通过PreparedStatements替换。我的意思是,通过允许“%”,我们可以按原样将查询字符串插入sql,因为sql也使用“%”作为其通配符运算符。嗯。。。。我不会改变答案的这一部分,因为至少在事先给出信息的情况下,我的蜘蛛感觉会刺痛。我确实认为在这种情况下,HTML编码百分比是最好的选择。