Delphi CGI SQL查询本地正常服务器报403禁止访问求助
问题排查与解决方案
核心现象:
- 本地Abyss服务器环境下,执行
select * from table1和select column1, column2 from table1均正常返回结果 - 服务器端IIS环境下,
select *语句能正常执行,但指定列的查询返回403 Forbidden错误,更换VPN IP为localhost后问题依旧
以下是针对性的排查和解决步骤:
1. 检查IIS请求过滤规则
IIS的请求过滤模块可能将包含特定列名的请求误判为恶意内容,触发拦截:
- 打开IIS管理器,定位到目标网站,进入「请求过滤」功能
- 分别查看「URL」「查询字符串」标签,确认是否存在针对
column1/column2或相关关键字的拦截规则 - 同时确认「HTTP动词」中POST请求已被允许(
select *能正常执行大概率POST是允许的,但仍需验证) - 若发现相关拦截规则,可临时禁用后测试指定列的查询是否正常
2. 排查URL重写规则
网站配置的URL重写规则可能对提交的SQL内容进行匹配拦截:
- 进入网站的「URL重写」模块,查看所有已配置的规则
- 临时禁用全部重写规则,测试指定列的查询是否恢复正常,再逐步排查具体触发拦截的规则
3. 检查服务器安全软件/防火墙
托管服务器上的杀毒软件、Web应用防火墙(WAF)等安全工具,可能将指定列的SQL查询误识别为SQL注入攻击:
- 查看安全软件的拦截日志,确认是否有针对该SQL请求的拦截记录
- 暂时关闭Web防护类功能,测试查询是否正常执行
- 若为WAF拦截,可添加自定义放行规则,允许该类合法SQL请求
4. 验证应用程序池权限与数据库访问
虽然本地执行正常,但仍需排除服务器端应用身份的数据库权限问题:
- 查看IIS应用程序池的运行身份,使用该身份直接连接SQL Server,执行
select column1, column2 from table1,确认数据库层面能正常返回结果 - 若数据库执行正常,说明问题出在IIS或服务器安全层,而非数据库权限
5. 检查表单提交的编码与内容处理
服务器端对表单提交内容的编码处理异常,可能导致SQL内容被篡改,触发安全拦截:
- 确认页面表单的提交方式为POST,编码类型为
application/x-www-form-urlencoded或multipart/form-data - 检查服务器端代码中获取SQL文本的逻辑,是否存在过度的特殊字符过滤或转义,导致SQL语句被修改后触发拦截
内容的提问来源于stack exchange,提问作者Gilles Lamenoise
相关产品推荐
相关产品推荐

