laravel mysql注入_PHP 项目中单独使用 Laravel Eloquent 查询语句来避免 SQL 注入

1392b94fea7aec17d8fa9f388762627f.png

OWASP (Open Web Application Security Project) 是一个记录当前 web 应用所受威胁情况的项目。我一直都在关注他们的网站,从 2010,2013 和 2017 年的报告中我发现了一些相似之处,SQL 或其他类型的注入威胁都是高居榜首。

这是个心腹大患。

它会导致你破产,因此这个事情关乎存亡,你单位应该着力处理此类问题避免它的出现。

什么是注入?

所谓注入,就是数据没有经过过滤,将无法信任的内容直接写入了系统解释器,这种行为会导致对站点产生SQL注入,更糟糕的是,攻击者可能会获得对系统的全部权限。

举个例子:

看下面的恶意查询语句,它会将含有恶意行为的SQL语句放在$name变量里,然后允许用户通过POST的方式传递给PHP脚本,从而达到最终使用传入的恶意代码进行攻击的目的。

//将恶意代码, DROP TABLE写入$name变量

`$name = "Mark';DROP TABLE users; -- ";\

$query = "SELECT * FROM users WHERE name='$name'";`

经过PHP脚本解析,这会最终生成这样的SQL语句:

SELECT * FROM users WHERE name='Mark';DROP TABLE users; -- '

正如你猜的那样,上述语句会将整个users数据表从数据库里删除掉。

正如尤达说的:

这太危险了,是的,太危险了。

如何防止对 PHP 应用的恶意注入?

首先,其实并没有真的往数据库里注入什么东西,这种错误只是由于没有正确地将查询语句格式化。解决的方法很简单,只要正确地格式化 SQL 语句,或者是直接把查询语句和数据分开处理。

怎么做呢?用参数化查询对数据格式化,并使查询语句与数据分离。

使用参数化查询,可以确保程序远离注入风险。

例子如下:

`$statement = $db->prepare('SELECT * FROM table WHERE id = ? and name = ? ');\

$statement->execut

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值