laravel - 这个原始 SQL 语句对 SQL 注入安全吗?
问题描述
这是我第一次在 laravel 中使用原始 sql 语句,所以我想确保这是使用它的最佳方式。
$events = DB::select("
SELECT
*
FROM
events
WHERE
(
start_date BETWEEN :start_date AND :end_date OR
end_date BETWEEN :start_date AND :end_date OR
:start_date BETWEEN start_date AND end_date OR
:end_date BETWEEN start_date AND end_date
)
AND agenda_id = :agenda_id",
[
'start_date' => Carbon::parse($dataEvent['start_date'])->format('Y-m-d H:i:s'),
'end_date' => Carbon::parse($dataEvent['end_date'])->format('Y-m-d H:i:s'),
'agenda_id' => $dataEvent['agenda_id'],
]);
解决方案
Laravel 提供对 SQL 注入的防御。这是因为由于查询生成器在后台使用 PDO,我们知道有一种方法可以将参数绑定到我们的查询,以便清理绑定的变量。在这里你将了解 Laravel 如何通过Raw SQL Queries防止 SQL 注入
SQL 注入风险主要出现在通常通过GET或POST请求发送数据的情况下。您应该通过将数据绑定到原始查询来保护您的数据库免受 SQL 注入:
$data = $request->name; // this comes from an input field
$query = DB::select(
DB::raw("SELECT * FROM users WHERE name=:user_name ")
,['user_name' => $data] // binds data with array
)
;
请注意冒号“:”和它旁边的变量。这将保护您的查询免受 SQL 注入。
推荐阅读
- vue.js - Vue3透明组件包装器不起作用
- python - GEE 不将数据导入数组
- python - 附加到 pd.DataFrame,动态分配任何新列
- python - 为什么我在尝试在 Flask 中加载模型时遇到 Unpickling 错误?
- python - 如何用另一个数据框中的值替换一个数据框中的 NaN 值
- css - 自定义光标 SVG 模糊
- java - 使用 Recycler View 使 LinearLayout 可滚动
- swift - 我想在 SwiftUI 中使用 NavigationLink 移动到第一个屏幕
- flutter - 从 PopupMenuButton 打开时删除项目
- java - 如何在活动打开时重新加载一次