如何通过sql where子句从表单到Php和安全执行数据库?



我有Laravel应用程序在Laravel 8。

假设我有一个过滤记录的表单。在这个表单中,我有一个字段叫做query。用户可以在这里输入sql语句,例如(a>5、b>= 35、(x== "a"||created_at>"2021 - 07 - 25 -").

用户只能使用在, = & lt;, & lt; =、= =、! =。

在这种情况下,保护应用程序不受SQL注入攻击的最佳方法是什么?编辑:我找到了这个包https://github.com/rexshijaku/sql-to-laravel-builder

我用过,效果很好。这个包返回一个字符串形式的完整查询。所以为了解决这个问题,我不得不eval("return $query;");。我还将这个存储库复制到我的应用程序中并进行了更改,因此这个包只返回WHERE值,因此我可以将这些WHERE值应用到某些查询中。eval看起来像这样eval("回归模型应用 MyModel:查询()→query&quot美元;)它返回一个MyModel查询生成器。

Laravel eloquent和query builder都可以防止sql注入,除了可以创建一个RAW sql语句。不建议你这样做,但人们会这样做。当他们不能找出正确的查询生成器方法时,他们将求助于使用raw。原始查询结合字符串连接是一个不好的信号。

https://laracasts.com/discuss/channels/eloquent/laravel-and-sql-injections

最新更新