站长进阶:PHP安全加固与防注入实战
|
PHP应用常因开发疏忽成为攻击入口,SQL注入、XSS、文件包含等漏洞屡见不鲜。站长不必精通底层原理,但需掌握关键防御手段并立即落地执行。
AI生成图画,仅供参考 数据库操作必须摒弃拼接SQL字符串。统一使用PDO或MySQLi的预处理语句(Prepared Statements),将参数与SQL逻辑彻底分离。例如:$stmt = $pdo->prepare("SELECT FROM users WHERE id = ?"); $stmt->execute([$id]); 即使$id含' OR 1=1--,也不会破坏语义。所有外部输入均需视为不可信——包括GET、POST、COOKIE、HTTP头甚至$_SERVER变量。对用户提交的数据,在使用前明确指定过滤方式:整数用(int)或filter_var($val, FILTER_VALIDATE_INT),邮箱用filter_var($email, FILTER_SANITIZE_EMAIL),通用文本用htmlspecialchars($str, ENT_QUOTES, 'UTF-8')防止XSS,而非依赖magic_quotes或全局addslashes。 禁止动态调用文件名。避免include($_GET['page'].'.php')这类写法。如需路由分发,应建立白名单映射,如$page_map = ['home'=>'home.php', 'about'=>'about.php']; 然后仅允许匹配键值。上传文件时务必重命名(如md5(uniqid().time()).'.jpg'),并校验MIME类型与文件头,禁用执行权限(chmod 644),存储路径置于Web根目录之外。 错误信息绝不暴露给生产环境。关闭display_errors(php.ini设为Off),开启log_errors并将错误日志写入受限目录。同时配置open_basedir限制PHP可访问的文件系统路径,禁用危险函数如eval()、system()、exec(),在php.ini中设置disable_functions = eval,exec,system,passthru,shell_exec,proc_open。 定期更新PHP版本与扩展组件。低版本PHP存在已知内存溢出、反序列化漏洞等问题。使用Composer管理依赖时,执行composer audit检查已知安全风险。部署前运行一次简单的安全扫描,例如用php -l检查语法错误,用grep -r "echo \\$_" ./ 检索未过滤输出的隐患代码。 安全不是一次性配置,而是持续习惯。每次新增表单、引入第三方库、修改.htaccess时,同步思考“这个改动是否扩大了攻击面”。把phpinfo()从线上服务器彻底删除,将数据库密码从代码中抽离至环境变量,这些细小动作积累起来,便是最扎实的防护墙。 (编辑:站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |

