如何通过.htaccess禁止filem.php直接浏览但允许内部脚本调用?
解决方法
下面提供两种基于.htaccess的配置方案,满足禁止直接浏览但允许内部脚本和前端POST调用的需求:
方案1:仅限制请求方法(适配前端AJAX调用)
直接禁止除POST外的所有HTTP请求方法,用户在浏览器输入URL发起的GET请求会被拦截,而前端的POST请求、服务器内部通过include/require的调用不受影响:
<Files "filem.php"> <LimitExcept POST> Order Deny,Allow Deny from all </LimitExcept> </Files>
方案2:增加来源验证(提升安全性)
如果要防止外部站点恶意发起POST请求,可以加上请求来源和本地IP的验证,同时保留POST方法限制:
<Files "filem.php"> <LimitExcept POST> Order Deny,Allow Deny from all </LimitExcept> # 替换成你自己的域名,比如example.com SetEnvIfNoCase Referer "^https?://(www\.)?yourdomain\.com/" internal_request Order Deny,Allow Deny from all Allow from env=internal_request # 允许本地服务器的内部HTTP请求 Allow from 127.0.0.1 Allow from ::1 </Files>
注意点
- 服务器内部通过PHP的
include/require调用filem.php时,不会经过Apache的HTTP访问控制规则,所以无需额外配置 - 如果遇到部分浏览器清空
Referer导致前端请求被拦截的情况,建议优先使用方案1,或在方案2中添加前端请求的IP白名单
内容的提问来源于stack exchange,提问作者Frank Ma
相关产品推荐
相关产品推荐

