3

我有一个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)

.htaccess对于此站点,或中没有重写规则apache 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
4

1 回答 1

3

当然它已经被 mod_security 阻止了。

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

因此 mod_security 将检查 cookie、查询字符串和发布形式中的此类字符串。一旦发现非法字符串,它将显示 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 编写的,因此您应该先学习它。

于 2013-01-15T02:52:06.877 回答