【问题标题】:GET with hyphens raises error 403带有连字符的 GET 引发错误 403
【发布时间】:2013-01-15 01:14:52
【问题描述】:

我有一个PHP 脚本,用于处理来自支付处理器的回调。

如果查询字符串 'result' 包含双破折号后跟一个单破折号,我们会得到 403,例如

/index.php?result=A--B-  (returns 403)
/index.php?result=A-B-   (is OK)
/index.php?result=A-B--  (is OK)
/index.php?result=A--B   (is OK)
/index.php?result=A---B  (returns 403)
/index.php?result=A-B-C- (is OK)

对于此站点,.htaccessapache config 中没有重写规则。

加载的模块如下:

core prefork http_core mod_so mod_auth_basic 
mod_auth_digest mod_authn_file mod_authn_alias 
mod_authn_anon mod_authn_dbm mod_authn_default 
mod_authz_host mod_authz_user mod_authz_owner 
mod_authz_groupfile 
mod_authz_dbm mod_authz_default util_ldap 
mod_authnz_ldap mod_include mod_log_config mod_logio 
mod_env mod_ext_filter mod_mime_magic mod_expires 
mod_deflate mod_headers mod_usertrack mod_setenvif 
mod_mime mod_dav mod_status mod_autoindex mod_info 
mod_dav_fs mod_vhost_alias mod_negotiation 
mod_dir mod_actions mod_speling mod_userdir mod_alias 
mod_rewrite mod_cache mod_suexec mod_disk_cache 
mod_file_cache mod_mem_cache mod_cgi mod_version 
mod_security2 mod_unique_id mod_php5 mod_ssl

【问题讨论】:

  • 您是在使用框架还是这是一个简单的 PHP 脚本?
  • 嗨彼得,没有使用框架,只是一个简单的脚本。实际上,使用仅包含 echo phpinfo(); 的 test.php 进行测试。有相同的结果。所以我认为实际的脚本与问题无关。谢谢
  • 禁用 mod-security2 是否有效?这是一个禁止错误,因此安全性可能是问题所在。
  • 您的 Apache 错误日志中有任何内容吗?
  • 是的,这肯定是mod_security 的事情。

标签: php apache .htaccess request.querystring mod-security2


【解决方案1】:

当然它已经被 mod_security 阻止了。

"--" 通常是 SQL 中行注释的开始标志。有时程序员会直接使用用户输入(如 $_GET[] 数组)来构建 SQL 查询,这会导致称为 SQL 注入的漏洞。

所以 mod_security 会检查 cookie、querystring 和张贴形式中的此类字符串。一旦发现非法字符串,就会显示403 Forbidden错误。

如果您在查询字符串中确实需要“--”并且您确定您已正确处理查询字符串(或者您实际上并未执行 SQL 查询),您可以从 mod_security 中删除此规则。

您可以在

中找到规则

MOD_SRCURITY_INSTALLATION_PATH/base_rules/modsecurity_crs_41_sql_injection_attacks.conf

MOD_SRCURITY_INSTALLATION_PATH 取决于您的服务器环境。

你可以在附近找到这样的规则

#
# -=[ Detect SQL Comment Sequences ]=-
#

#
# -=[ PHPIDS - Converted SQLI Filters ]=-
#
# https://dev.itratos.de/projects/php-ids/repository/raw/trunk/lib/IDS/default_filter.xml
#

搜索包含字符串-- 的规则并修改它们。 由于它们都是用 RegExp 编写的,因此您应该先学习它。

【讨论】:

  • 这可能是一个很好的答案,除了你的最后一行不是很好。大写是大写,编辑规则将删除某些保护措施,但不会降低功能或导致 Apache 停止工作。有很多组安全规则,如果用户总是使用准备好的语句或者不使用 SQL,他们可以删除所有的 SQL 规则。此外,您正在对 OPs 规则集做出假设,我怀疑这些行号与默认值有关,如果是这样,您应该这么说。如果你解决了这些问题,你就会得到我的投票。
  • 我刚刚遇到了相同的多个连续加号。有人可以确认这被相同的机制阻止了吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-05-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-08
  • 2019-07-21
  • 1970-01-01
相关资源
最近更新 更多