我有一个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
答案 0 :(得分:3)
当然它已被mod_security阻止了。
" - "通常是SQL中行注释的开始标志。有时程序员直接使用用户输入(如$ _GET []数组)来构建SQL查询,这会导致一个名为SQL Injection的漏洞。
因此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编写的,所以你应该先学习它。