gpt4 book ai didi

php - 如何从 Laravel 中的 SQL 注入(inject)中保护此 sql 查询?

转载 作者:行者123 更新时间:2023-12-04 02:30:19 27 4
gpt4 key购买 nike

我正在尝试在 Laravel 中创建 rest API。如何从 sql 注入(inject)中保护这样的 SQL 查询?

Route::get('api/restaurant/id/{id}', 'RestaurantController@getRestaurantById');

public function getRestaurantById($id) {
$restaurant = Restaurant::where('id', $id)->first();

return $restaurant;
}

最佳答案

如果您使用 laravel ORM 构建您的 sql 查询,您的查询会自动受到 sql 注入(inject)保护。

例如:

$restaurant = Restaurant::where('id', $id)->first();

这个查询是由 laravel ORM 创建的,如果你运行 dd(Restaurant::where('id', $id)->toSql())你会看到 id 没有直接注入(inject)到查询中:
SELECT * FROM restaurants WHERE id = ?

您可以使用 DB::select() 运行 sql 原始查询。或 DB::raw() ... ETC。
如果您查看 laravel 文档,您会发现每个原始方法都有数组参数,通常是第二个参数。
例如:
DB::select('SELECT * FROM restaurants WHERE id = ?', [$id]);
Restaurant::whereRaw('id = ?', [$id])->first();
...
DB::raw('SELECT * FROM restaurants WHERE id = ?', [$id]);

上述每个查询都不受 sql 注入(inject)的影响。

Do not write queries like this DB::select("SELECT * FROM restaurants WHERE id = $id"); This can be extremly dangerous for your app.



更多信息请看这里: https://laravel.com/docs/5.8/database#running-queries

希望这可以帮助。

关于php - 如何从 Laravel 中的 SQL 注入(inject)中保护此 sql 查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60332447/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com