pau*_*dru 1 php mysql sql-injection
基本上我在网上阅读了一些文章之后开始使用预备语句,这些文章说这是防止sql注入的简单方法.跳到我的场景,我有一个logExit函数,它将访问者来自我网站的页面和他离开我网站后的页面插入数据库.
public function logExit($url){
$HTTP_REFERER = ($_SERVER['HTTP_REFERER'] ? $_SERVER['HTTP_REFERER'] : '');
$REMOTE_ADDR = ($_SERVER['REMOTE_ADDR'] ? $_SERVER['REMOTE_ADDR'] : '');
$params = array(
$REMOTE_ADDR,
$HTTP_REFERER,
$url
);
// custom query function ~ prepare/execute
$this->query("
INSERT INTO exits(ip, url_in, url_out) VALUES (?, ?, ?)
", "sss", $params);
}
Run Code Online (Sandbox Code Playgroud)
问题是,今天当我登录管理面板检查我今天有多少访问者以及他们从我的网站离开了哪里时,我收到了大量警报.当我检查我的数据库时,我有13500个从相同的IP退出到不同的页面,但问题来自该url_in领域,这里有一些例子:
ip | url_in | url_out |
-----------+-------------------------------------+---------------|
xx.xx.xx |'"></a><script>alert(11779)</script> | xxxxxxxxxxxxx |
-----------+-------------------------------------+---------------|
xx.xx.xx | ,alert(11774), | xxxxxxxxxxxxx |
-----------|-------------------------------------|---------------|
xx.xx.xx | %c0%a7 | xxxxxxxxxxxxx |
-----------|-------------------------------------|---------------|
xx.xx.xx | %2527 | xxxxxxxxxxxxx |
-----------+-------------------------------------+---------------|
Run Code Online (Sandbox Code Playgroud)
HTTP_REFERER = url_in
$ url = url_out
所以这似乎很奇怪,因为据我所知HTTP_REFERER应该是一个URL.这个混乱怎么进入我的数据库以及如何防止它?
谢谢
PS.托管公司向我展示了这个日志,这是什么意思?
access-logs/my-example-website.com:xxx.xxx.xxx.xx - - [21/Dec/2017:18:59:59 +0200] "GET /mode.php?admin_mode=1&referer=javascript:alert(16555) HTTP/1.1" 404 - "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko"
Run Code Online (Sandbox Code Playgroud)
这是按设计工作的,您可以免受SQL注入问题的影响.这里的关键是SQL注入攻击只是众多的一个向量.
为了安全地使用该内容,您必须正确地将其转义为使用它的上下文.如果您将其显示为HTML,则意味着使用类似于htmlspecialchars阻止XSS攻击的函数,或者如果您使用JSON或JavaScript json_encode对其进行编码,则使用为该上下文对其进行正确编码.
如果你在数据库中看到像这样的垃圾,可能是因为你被一些自动攻击者探测过.大多数生产站点每天都会看到成千上万的攻击企图,遗憾的是这就是现状.如果你想安静下来,你可以使用诸如fail2ban之类的东西来禁止重犯.
| 归档时间: |
|
| 查看次数: |
72 次 |
| 最近记录: |