我正在尝试创建一个servlet请求过滤器,它根据白名单字符过滤任何传入的请求。
我只想接受那些与白名单模式匹配的字符,以避免攻击者以脚本或修改URL的形式执行任何恶意代码。
有人知道哪些白名单字符应该用于过滤任何HTTP请求字符串吗?
如有任何帮助,将不胜感激
提前感谢
使用RegEx实现模式匹配机制,从URL模式中查找白名单字符。。
遵循链接1
或者您可以尝试:
if (inputUrl.contains(whiteList)) {
// your code goes here
}
或者,如果您需要知道它发生在哪里,您可以使用indexOf:
int index = inputUrl.indexOf(whiteList);
if (index != -1) // -1 means "not found"
{
...
}
谢谢,
~ Chandan
问题是"恶意"是一个非常宽泛的术语。你应该清楚地知道你试图保护哪些类型的攻击,然后采取措施防止它
一般情况下,您不能指定需要过滤掉的字符集,您需要知道您在url中的输入将在哪个域中使用。通常危险的不是url本身,而是url参数,这些参数由用户提供,然后由应用程序解释。根据应用程序将如何使用此输入,您需要采取特定的预防措施。例如:
- Url参数用于确定重定向的目标。用户可以使用它将受害者导航到恶意网站,该网站伪装成你的网站,但会窃取用户提供虚假凭据的凭据,等等。在这种情况下,你应该构建你的应用程序所期望的允许目的地的白名单,并禁止其他人。请参阅OWASP top TEN-未验证的重定向和转发
- 您将数据从url参数保存到DB。您应该使用参数化查询来防止SQL注入。参见OWASP SQL注入Cherat表
- Url参数数据将显示为html。您应该使用一些已经验证过的消毒剂(如OWASP html消毒剂或AntiSamy)对html进行消毒,以防止跨站点脚本
等等…
关键是,没有什么灵丹妙药可以保护您免受所有恶意攻击,尤其是不能在servlet过滤器中白名单某些字符。您应该知道潜在的恶意数据在哪里使用,并在处理时考虑到其具体用途,因为不同的目标会有不同的漏洞,需要采取不同的保护措施。
OWASP TOP TEN是安全问题高级别概述和防范措施的良好开端。然后,我推荐一些owasp提供的更详细的指南和资源。