gpt4 book ai didi

php - 准备好的语句是否可以防止我在数据库中看到垃圾?

转载 作者:行者123 更新时间:2023-11-29 03:51:04 26 4
gpt4 key购买 nike

基本上,在我阅读了互联网上的一些文章后,我开始使用准备好的语句,这些文章说这是一种防止 sql 注入(inject)的简单方法。转到我的场景,我有一个 logExit 函数,它将访问者来 self 网站的页面以及他离开我的网站后要去的页面插入到数据库中。

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);
}

问题是,今天当我登录管理面板查看今天有多少访问者以及他们从我的网站离开的位置时,我收到了大量警报。当我检查我的数据库时,我有大约 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 |
-----------+-------------------------------------+---------------|

HTTP_REFERER = url_in

$url = url_out

所以这似乎很奇怪,因为据我所知,HTTP_REFERER 应该是一个 URL。这种困惑是如何进入我的数据库的以及如何防止它?

谢谢

附言。托管公司给我看了这个日志,这是什么意思?

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"

最佳答案

这是按设计工作的,您可以免受 SQL 注入(inject)问题的影响。这里的关键是 SQL 注入(inject)攻击只是 one vector of many .

为了安全地使用该内容,您必须针对使用它的上下文对其进行适当的转义。如果您将其显示为 HTML,则意味着使用类似 htmlspecialchars 的函数以防止 XSS 攻击,或者如果您使用 JSON 或 JavaScript 对其进行编码,则使用 json_encode为该上下文正确编码。

如果您在数据库中看到这样的垃圾,那可能是因为您正在被一些自动攻击者探测。大多数生产站点每天都会看到数以万计的攻击尝试,遗憾的是事情就是这样。如果您想安静下来,可以使用 fail2ban 之类的东西禁止屡犯者。

关于php - 准备好的语句是否可以防止我在数据库中看到垃圾?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47931714/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com