Laravel 安全:避免 SQL 注入 0 个改进

当你使用 Eloquent 查询时,如:

User::where('name', $input_name)->first();

Eloquent 内部使用的是 PDO 参数绑定,所以你的请求是安全的。虽然如此,在一些允许你使用原生 SQL 语句的地方,还是要特别小心,例如 whereRaw 或者 selectRaw 。如下:

User::whereRaw("name = '$input_name'")->first();

以上这段代码里是存在安全漏洞的,请尽量避免使用原生查询语句。如果你有必须使用原生语句的情况,语句里又包含用户提交内容的话,可以利用其提供的,类似于 PDO 参数绑定进行传参,以避免 SQL 注入的风险:

User::whereRaw("name = ?", [$input_name])->first();
本文为 Wiki 文章,邀您参与纠错、纰漏和优化
讨论数量: 7

表示原生sql不敢用

5年前 评论

嗯,写得很对

5年前 评论
mouyong

sad

sad

5年前 评论

sql语句中的请求提交的变量值,不是已经由中间件过滤转义了吗?那用原生的也没问题啊。

5年前 评论
h-o-o 4年前
勇敢的心 1年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!