我们在应用程序中使用 ESAPI 安全层。我们还设计为从浏览器端传递的通配符搜索使用“%”字符。这是一个糟糕的选择,并且已作为遗留设计继承下来,以便轻松构建 sql 以在后端运行。
现在,输入中的“%”字符被 ESAPI 验证器拒绝,以防止双重编码攻击。我们正在积极寻求将 '%' 替换为 '*' 之类的想法。但在此期间,为了能够使用 '%' 进行通配符搜索,我们正在权衡这些选项中的选项:
1) 关闭 ESAPI 规范化器。(坏主意,为双重编码留下漏洞。)
2) 在安全层中,在过滤器通过之前,将所有 '%' 替换为某个不太可能的字符。然后换回来。(对此人们有不同的看法,有人认为这就像没有防御双重编码攻击一样好,其他人认为它有一些价值。)
3)在前端应用程序中,让用户输入'%',但在提交到服务器之前将它们替换为'*'。将需要在 DAO 层中再次将 '*' 操作为 '%'。将需要在所有可以采用通配符输入的 UI 代码中进行最多的代码更改。
想请教如何最好地解决这个问题。感谢任何帮助。