前端传数字ID到后端,做类型检查能防SQL注入吗?

a'ゞ翌菡 阅读 11

我在写一个用户信息查询功能,前端传了个用户ID给后端接口。听说只要确保这个ID是数字就能防止SQL注入,是真的吗?

我试过在前端用typeof id === 'number'判断,但发现用户还是可以通过抓包工具直接发字符串过来。那是不是说光靠前端类型检查根本没用?

后端是用PHP写的,现在拼SQL语句像这样:

$sql = "SELECT * FROM users WHERE id = " . $_GET['id'];

这种写法即使前端传的是数字,是不是依然有注入风险?该怎么正确防护?

我来解答 赞 1 收藏
二维码
手机扫码查看
1 条解答
南宫翠翠
前端检查就是个摆设,抓包工具一改啥都白搭,防注入必须得后端来。你那拼SQL的写法只要传个 1 OR 1=1 就能查光全表,太危险了。省事的话直接把ID强转成整型,或者用预处理语句,代码给你。

// 最偷懒的写法:强转类型,非数字直接变0
$id = (int)$_GET['id'];
$sql = "SELECT * FROM users WHERE id = " . $id;

// 或者稍微正经点用PDO预处理(推荐)
$stmt = $pdo->prepare('SELECT * FROM users WHERE id = :id');
$stmt->execute(['id' => $_GET['id']]);
点赞 1
2026-03-04 10:54