我有一个托管在IIS上的ASP.NET Core 3.2 Web应用程序。我的网站托管在使用Plesk的共享环境中。当我查看Web应用程序防火墙页面时,它显示核心规则集为“OWASP(free)running on IIS(ModSecurity 2.9)"。
我的一些客户在访问网站时遇到了很多403 Forbidden错误。这似乎更多地发生在iOS上而不是Android或Desktop上的用户。用户经常不得不删除iPhone的Safari网页数据,包括Cookie,403很快又回来了。
在查看ModSecurity审计日志文件后,我可以看到很多条目,其中大部分似乎是误报。例如,访问经常被触发的规则#942440拒绝,它认为这是SQL注入攻击。此规则检测在REQUEST_COOKIES中找到的SQL注解字符序列。我不知道为什么cookie包含这些字符。我使用AspNetCore身份验证和身份。
我在网上对ModSecurity和核心规则集做了一些研究,似乎CRS 3减少了90%以上的错误警报。我的主机的Plesk控制台显示版本2.9,这特别令人沮丧,因为当我试图从主机提供商那里获得支持时,我得到的一行答案并不是特别有用。例如,我询问了关于更新到CRS 3的问题,得到的答复是“我相信WAF的更新都是由Plesk管理的”。
我也不知道Paranoia Level设置为什么,因为Plesk Web应用程序防火墙页面上没有显示。我唯一的模式选项是关闭,打开或仅检测/日志。
在查看了审计日志文件的内容之后,我发现另一条规则(#942450)“SQL Hex Encoding Identified”似乎也引起了麻烦。此规则查找带有两个额外十六进制数字的模式“0x”的字符串。这是一种十六进制编码,可以指向正在使用的漏洞,但此编码的问题是会话cookie有时可能包含此模式。
ModSecurity不允许忽略名称与特定模式匹配的cookie,因此我认为唯一可行的方法是让此规则忽略所有cookie。至少这样规则对于post和查询字符串参数仍然是完整的,但是它不会再触发cookie了。我不知道这是怎么做到的,因为我不知道如何限制两个参数的排除(ModSecurity集合),保留规则的其余部分不变。在Plesk页面上,它只允许我通过指定其ID来停用安全规则。
任何人都可以建议我在这种情况下可以做些什么?我觉得我应该看看改变我的主机提供商,提供更好的服务/支持,并为我提供更大的控制WAF.我的网站不是那么大(小于1GB).在某些时候,我还需要考虑更新它从核心3.2到.NET 6或7.我的位置是澳大利亚.
1条答案
按热度按时间sczxawaw1#
值班程序。
不幸的是最大的问题是:
模式的唯一选项是关闭、打开或仅检测/记录。
但让我们来看看上面提到的规则。
例如,访问通常被触发的规则#942440拒绝,该规则认为这是SQL注入攻击。此规则检测在REQUEST_COOKIES中找到的SQL注解字符序列。我不知道为什么cookie包含这些字符。
规则942440在PL 2上被激活,这意味着您的WAF至少在PL 2上。但是,此规则还检查
REQUEST_COOKIES_NAMES
(例如“PHPSESSID”)、ARGS_NAMES
(例如“user”)和ARGS
(例如user
变量的值)。规则942450也检查相同的目标。如果没有详细信息(例如,事务的audit.log的完整内容),很难找出问题所在。
但请考虑您可以将问题局限于本地。正如您所写的,该问题通常发生在客户端使用iOS时,并且客户端触发了上述一个或多个规则。
您只能通过排除来解决问题。但是如果您只能打开/关闭/检测,那么您将无法添加任何排除-正如您在此处所写的:
在Plesk页面上,它只允许我通过指定安全规则的ID来停用安全规则。
是的,这是个大麻烦。
有谁能告诉我在这种情况下该怎么做?
如果我是你在这种情况下,我会寻找另一个提供者,或者如果它太复杂,关闭这些规则,并检查您的应用程序两次,它不允许输入看起来像这些规则过滤器。