硬核PHP教程:从入门到防注入实战
|
PHP不是“过时语言”,而是Web开发的基石。从一个最简脚本开始:<?php echo "Hello World"; ?>,保存为index.php,用内置服务器php -S localhost:8000启动即可访问。注意始终启用错误报告(error_reporting(E_ALL); ini_set('display_errors', 1);),便于调试而非隐藏问题。 变量无需声明类型,但务必初始化。$user_input = $_GET['name'] ?? ''; —— 使用空合并运算符避免未定义索引警告。$_GET、$_POST、$_COOKIE均为用户可控输入源,绝不可直接拼接进SQL或HTML中。 防SQL注入的核心是“参数化查询”。使用PDO时:$stmt = $pdo->prepare("SELECT FROM users WHERE id = ?"); $stmt->execute([$id]); —— 问号占位符由驱动严格绑定类型,原始SQL结构不受输入干扰。永远不要用"SELECT FROM users WHERE id = " . $_GET['id']拼接。 输出到HTML前必须转义。echo htmlspecialchars($user_input, ENT_QUOTES, 'UTF-8'); 可将<script>转化为<script>,阻断XSS。若需保留有限HTML,用HTMLPurifier等白名单库,而非正则过滤。 文件操作尤其危险。禁止将$_GET['file']直接传入include()或file_get_contents()。必须校验后缀(如仅允许.png)、限定目录(用realpath()比对基目录)、拒绝路径遍历(strpos($path, '..') !== false则拒)。上传文件更要重命名(uniqid() + 随机字符串),并用mime_content_type()二次校验类型,而非仅依赖$_FILES['type']。
AI设计的框架图,仅供参考 安全不是功能补丁,而是编码习惯。每个外部输入都是潜在攻击面:时间戳、HTTP头、数据库返回值亦需验证。开启PHP配置open_basedir限制文件访问范围,部署时关闭display_errors,改用error_log记录。记住:没有银弹,只有层层防御与持续验证。 (编辑:站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |

