前端做SQL注入防护,只靠输入验证够吗?

FSD-熙研 阅读 29

我在写一个带搜索功能的React页面,后端是PHP。现在对用户输入做了简单的正则过滤,比如/[']/g这种,但听说这样防不住SQL注入?是不是还得配合参数化查询才行?

我试过在输入框里输' OR '1'='1,结果后端直接报错了,说明没完全拦住。那前端到底该做到哪一步?是不是光靠input验证根本不够用?

我来解答 赞 2 收藏
二维码
手机扫码查看
1 条解答
程序员爱景
兄弟,前端做SQL注入防护这条路本身就走到歪了。我跟你直说吧,前端那点正则过滤就是个心理安慰,实际屁用没有。

后端报错说明啥?说明你那个过滤被绕过了唄。' OR '1'='1 这种经典payload,轻轻松松就能绕过你那个正则。攻击者有的是办法编码、变形、嵌套,你堵不完的。

SQL注入的防护必须在后端做,前端验证顶多算个用户体验优化——比如格式不对就不让提交,减少无效请求。但安全层面完全指望不上。

PHP那边正确做法是参数化查询,别管你用的是PDO还是mysqli,都支持预处理语句。像这样:
// PDO写法
$stmt = $pdo->prepare("SELECT * FROM users WHERE name = :name");
$stmt->execute(['name' => $searchInput]);
$results = $stmt->fetchAll();

// mysqli写法
$stmt = $mysqli->prepare("SELECT * FROM users WHERE name = ?");
$stmt->bind_param("s", $searchInput);
$stmt->execute();


参数化查询的核心是把输入当成纯数据处理,而不是SQL语句的一部分,攻击者输入的 OR '1'='1 就会被当作字符串字面值,根本不会被执行。

我再补一句,除了参数化查询,权限控制也要做好——应用最好别用root这种高权限账号跑数据库,万一被搞进去了还能少损失点。

你前端那个正则可以去掉了,真没必要,留着还给人一种"我在做安全"的错觉,反而容易掉以轻心。
点赞
2026-03-10 21:28