我们刚刚有一个(相当重要的)WordPress 数据库莫名其妙地丢失了。幸运的是,我们每晚都会进行备份,所以这不会是世界末日,但我想避免或至少能够在将来追踪这种情况。
现在,我们仍然不知道数据库被删除是否是由于初级开发人员不小心在错误的 mysql 命令行或 phpymadmin 窗口中输入命令,或者这是否是恶意 SQL 注入攻击。
显然,我们需要对初级开发人员 mysql 用户帐户进行更严格的控制,但除此之外,我想知道通过服务器管理检测/防止 sql 注入的最佳实践是什么。
请注意,我不想知道如何对个人输入进行清理——我每次都会这样做,但我们编写了很多自定义脚本,而且我们的员工中总是会有初级开发人员,他们可能会忘记或犯错误。至少,我想知道最好的(最简单的)方法:
以标准访问日志格式记录所有GET或POST请求,其中包含查询字符串或发布带有任何 SQL 的数据(我想象使用正则表达式,就像/(drop|delete|truncate|update|insert)/所有虚拟主机的单个文件一样,然后我可以 grep
drop仅将以, delete,开头的 mysql 命令记录truncate到单个文件中。每个条目都需要包含最短的时间和 mysql 用户,但是如果我可以看到它是通过命令行还是 php 以及 php 脚本是什么,那就太好了。
感谢您的帮助!显然,请让我知道是否有任何使用我忽略的标准日志的基本解决方案。
如果我没有尝试过我在互联网上能找到的所有东西,我就不会在这里发帖……感谢经验丰富的系统管理员的任何指导。
这里是我的问题:在cron作业/etc/cron.daily,/etc/cron.hourly等等都是我Slicehost Ubuntu的服务器上运行良好-它们的执行被记录到两个/var/log/syslog及/var/log/cron.log
我已经通过应该每分钟运行一次的 crontab 创建了两个测试 cron 作业,一个作为 root 用户,一个作为管理员用户。这是以crontab -lroot 身份运行的输出
$ crontab -l
* * * * * /bin/date > /tmp/unicorns
$ crontab -u neil0 -l
* * * * * /home/neil0/crontab/unicorn.sh >> /home/neil0/logs/crontab.log >&1
Run Code Online (Sandbox Code Playgroud)
编辑 1:我没有完全复制这个......输出中没有换行符,这就是问题的根源
这里是内容 unicorn.sh
#!/bin/sh
echo 'UNICORNS'
Run Code Online (Sandbox Code Playgroud)
但是既/home/neil0/logs/crontab.log没有/tmp/unicorns更新也没有更新,并且没有运行这些作业的记录/var/log/syslog或/var/log/cron.log!
在你问之前,似乎 cron 正在运行——
$ ps aux | grep cron
root 1588 0.0 0.1 18616 980 ? Ss 12:31 …Run Code Online (Sandbox Code Playgroud)