如何实现URL含单引号时跳转网站以防范SQL注入?求PHP代码
嘿,作为PHP新手碰到这种安全问题太正常了,我来帮你搞定这个需求,同时也得给你提个关键建议——只靠跳转其实是治标不治本的临时方案,真正防SQL注入得用更专业的方法,不过先先满足你的当前需求:
实现参数含单引号时跳转的代码
你可以在inner.php的最开头插入这段代码,它会自动检测id参数里是否包含单引号,一旦检测到就立刻跳转到首页:
<?php // 先判断id参数是否存在,避免未定义报错 if (isset($_GET['id'])) { $id_param = $_GET['id']; // 检查参数中是否包含单引号 if (strpos($id_param, "'") !== false) { // 跳转到首页,替换成你的实际首页地址 header("Location: http://www.dgqadefence.gov.in/index.php"); exit; // 必须加exit,防止后续代码继续执行 } } // 下面是你原本的inner.php业务代码 ?>
重要提醒:真正的SQL注入防护方案
上面的代码只能拦截单引号的情况,但SQL注入的攻击方式远不止这一种(比如双引号、特殊字符组合、编码绕过等),所以更稳妥的做法是使用PDO或MySQLi的预处理语句,从根源上杜绝注入风险。给你举个PDO的简单示例:
<?php // 初始化PDO数据库连接(替换成你的数据库信息) $dsn = 'mysql:host=你的数据库主机;dbname=你的数据库名;charset=utf8mb4'; $db_user = '数据库用户名'; $db_pwd = '数据库密码'; try { $pdo = new PDO($dsn, $db_user, $db_pwd); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // 使用预处理语句,用占位符替代直接拼接参数 $stmt = $pdo->prepare("SELECT * FROM 你的表名 WHERE id = :id"); // 如果id是整数类型,指定参数类型为INT会更安全 $stmt->bindParam(':id', $_GET['id'], PDO::PARAM_INT); $stmt->execute(); $data = $stmt->fetch(PDO::FETCH_ASSOC); } catch(PDOException $e) { echo "数据库错误: " . $e->getMessage(); } ?>
这种方式能确保用户输入的参数不会被解析为SQL语句的一部分,是目前业界公认的防SQL注入标准方案。
内容的提问来源于stack exchange,提问作者bigsmoke
相关产品推荐
相关产品推荐

