360 php防注入代码 慢查询日志操作有什么用?为什么要用它呢?php pdo 防注入
2022-01-03
起源
如果您查看过慢查询日志或网站日志,您可能会看到以下语句:
col.id = ((0)from(((90)))v)/*'+((0)from(((90)) )v)+'"+((0)from(((90)))v)+"*/;
可能是你的网站开通后大约一个小时内收到的日志,也可能是你访问web服务器时看到的日志()。如果你在慢查询日志或者日志中看到,并且跳转请求返回的状态码是200而不是404,那么恭喜你,你可能中标了,被Sql攻击了。在本文中,我们将通过使用 () 函数作为干预来与您讨论。
() 函数
(n),暂停数据库n秒。
不要混淆控制台中的状态。它描述了连接的状态。 () 函数做一件事,就是暂停数据库的执行网站开发,直到设定的时间。那么这个操作有什么用呢?为什么要使用它?
通常,有些操作需要一段时间的操作,而这些操作需要临时的操作或更新(比如数据锁,比如记录一个Pos点后,备份一个从库),当然也可能也是黑客攻击。
漏洞渗透扫描
如果你的数据库和网站没有采取安全措施,直接将端口暴露在公网(如ssh 22端口、3306端口),那么扫描仪很快就能扫描渗透你的端口。因此,综中意在主机保护中也提到了条款:禁止端口暴露于公网;修改常用端口。具体来说,最常用的扫描渗透和安全审计工具是。
是使用它编写的数据库SQL注入扫描工具。目前支持,,,,,,,,,,,,,,,,,,,,,,,,,,2等常见的数据安全漏洞(sql注入)
在盲主扫描中,通常会用到各种sql语句,通常会用到命令。例如360 php防注入代码,扫描那些使用旧的或非 PDO 连接的 PHP 网站,然后枚举易受攻击的 AJAX 命令或 GET/POST 结果的列表。通常需要在输出扫描结果时停止执行。
而类似的工具可以并行攻击数十个站点,通过强制这些站点上的数据库一段时间(数量设置取决于个人经验),并计算时间来测试渗透命令的有效性。这是在安全行业。通常称为基于时间的盲注。
快速剖析
本文开头我们举了一个sql语句的例子,是常用的盲注的典型语句。如果语句被执行,条件语句部分被替换成类似下面的内容,那么它绝对会锁定数据库:
col.id = ((0)from(((90)))v)/*'+((0)from(((90)) )v)+'"+((0)from(((90)))v)+"*/;
请注意,该语句巧妙地使用了各种运算符和分隔符。请注意,此语句对于仅拼写 sql 语句的程序很有用。使用PDO,语句可以过滤,不能执行。
PHP 注入示例
让我们写一个php例子来解释这个问题。看下面的函数:
在上面的例子中,我们使用了 () 函数来生成一个逗号分隔的 ID 列表。由于没有对输入进行校验,可能传入数组中存在非法命令或将数据库表中的数据转储到显示页面。解决这个问题,需要对传入的数据进行校验,并校验长度(根据实际需要限制参数长度,可以大大防止注入成功)。
可以使用PDO等链接框架,使用占位符替换(绑定)参数生成SQL语句,并通过参数验证,可以防止大部分SQL注入值。
PDO 不是万能药
上面我们也说了PDO可以防止大部分PHP Sql注入问题,但不能100%保证解决所有问题。
前面说过,把Sql独创的动态组合方式放在一起,让很多PHP系统都处于危险之中
所以,不知所措的程序员难免会通过谷歌寻求帮助:
以上是网上非常流行的PDO教程之一。代码使用了PDO,但与Sql的纯手工拼凑无异。这也是一种非常危险的做法。
下面也有答案(某知名编程问答网站):
你看到了吗?这是糟糕的代码网站开发,但它仍然被接受。编码者接受的概念是“使用PDO防止sql注入”,但是他们不知道PDO还有一个防止注入的前提,那就是必须用“?占位符绑定来写SQL,然后,然后”,否则没用。
不要低估()
也许你觉得()的执行没有什么问题?至少不要删除你的数据库。 () 易于识别,通常在此阶段危害不大。但是通过盲注Fuzz测试数据,可以执行大量查询,快速找到有效的攻击EXP。
其实这就是死核函数。这种想法的一个问题是,在依赖于 UX/UI 的生产 Web 项目中,通常的做法是将代码执行用户限制为只有权限,而不是给他 DROP 权限。但是()只需要权限就可以使用。
如何禁止?
因为只需要使用功能,所以不需要权限。并且可以作为“最安全”的命令执行。
这只是一个SQL注入漏洞,您不能使用定时攻击来暂停数据库执行或浏览数据(或转储)。而且一般情况下,不能通过简单的配置来禁用功能。您可以在数据库、表和列级别限制权限。当然,如果有办法简单地禁止某些危险功能,也是有道理的(比如php.ini中的配置)。
其实也给了我们一个防御思路,基于对关键字的检测来实现SQL攻击预警和防御。例如,基于此检测原理开发了 Web 防火墙 App-Waf(://App-Waf)。通过分析访问日志中的关键字360 php防注入代码,它包括功能。以下是我使用的关键字。规则(部分)。
本文中bug和大家用()函数作为介入来讨论Sql注入的问题。一般来说,可以使用()来枚举SQL漏洞。 PDO绑定参数的方法可以防止Sql注入。 ( ) 一般无害,一般情况下也很少使用,但可以变身宝物,作为检测攻击的手段。
更多安全和Sql注入问题,关注bug,bug会写文章和大家一起学习。