Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如果url包含无效字符,如何检测和阻止ip_Php_Ip_Blocking - Fatal编程技术网

Php 如果url包含无效字符,如何检测和阻止ip

Php 如果url包含无效字符,如何检测和阻止ip,php,ip,blocking,Php,Ip,Blocking,我有一个url中有id=的页面。问题是,这吸引了试图操纵url的黑客的大量不必要的注意,例如id=133+顺序乘以1——(遗憾的是,更改id不是一个选项) 我有下面的代码来获取id并去除所有的“不好” $ia = intval($_GET['id']); $ib = mysql_real_escape_string($ia); $ic = strip_tags($ib); 但我真正想做的是在x时间内禁止用户的ip地址。这样,如果他们曾经是一个安全弱点,它将为我赢得时间来检测它,并在黑客之前修复

我有一个url中有id=的页面。问题是,这吸引了试图操纵url的黑客的大量不必要的注意,例如id=133+顺序乘以1——(遗憾的是,更改id不是一个选项)

我有下面的代码来获取id并去除所有的“不好”

$ia = intval($_GET['id']);
$ib = mysql_real_escape_string($ia);
$ic = strip_tags($ib);
但我真正想做的是在x时间内禁止用户的ip地址。这样,如果他们曾经是一个安全弱点,它将为我赢得时间来检测它,并在黑客之前修复它(安全总比抱歉好!)

我想排除不必要的CPU使用


是否有人知道一个php脚本,它可以在x时间内检测和阻止基于url操作的ip?或者,如果有人想展示一个他们已经做过的基本例子,那就更好了

您可以从超级全局变量
$\u SERVER
获取所有必要的数据,您可以使用遥控地址和遥控主机键(详细信息)

要阻止某人,可以将此值与以前保存的值进行比较。您可以将它们保存在任何位置,如数据库(最简单的解决方案)或外部文件中。为了更安全,服务器不应访问此文件

然而,这并不是一个完美的解决方案,因为更改IP地址的可能性和动态设置的问题

在您的数据库/文件中,您可以添加一个类似“expires”的字段,其中包含允许用户使用的时间


但正如我在评论中所说,我不会阻止任何人。正如@DaveRandom所写的,您可以简单地将
id
转换为整数,从而避免SQL注入。请记住,您应该考虑从客户端获取和处理的所有变量,也包括
$\u POST
变量。

您可以从超级全局变量
$\u服务器
获取所有必要的数据,您可以使用密钥REMOTE\u ADDR和REMOTE\u HOST(更多信息)

要阻止某人,可以将此值与以前保存的值进行比较。您可以将它们保存在任何位置,如数据库(最简单的解决方案)或外部文件中。为了更安全,服务器不应访问此文件

然而,这并不是一个完美的解决方案,因为更改IP地址的可能性和动态设置的问题

在您的数据库/文件中,您可以添加一个类似“expires”的字段,其中包含允许用户使用的时间


但正如我在评论中所说,我不会阻止任何人。正如@DaveRandom所写的,您可以简单地将
id
转换为整数,从而避免SQL注入。请记住,您应该考虑从客户端获取和处理的所有变量,以及
$\u POST
变量。

您有两个选择:

  • 如果源IP包含在您管理的某个黑名单中,只需通过请求失败,就可以在PHP中自己实现IP阻塞
  • 以某种方式告诉您的服务器程序(Apache、IIS等)在接受传入连接之前阻止请求
  • 为自己编写一个非常简单的代理,如果HTTP请求不是源于黑名单上的IP,它将接受HTTP请求,检查ID的语义有效性,管理黑名单,并将可接受的请求转发到实际的Web服务器
  • 选项1相当直截了当:维护一个黑名单,对照黑名单检查传入的请求,并根据需要使它们失败。您可以在此处找到更多信息,包括一个简单的代码示例:

    选项1的问题在于,它并没有真正为您节省任何CPU负载,而且可能比DaveRandom建议的简单解析ID并验证它而不是验证源IP更需要计算

    不幸的是,选项2在很大程度上依赖于您正在使用的服务器基础结构,并且在大多数情况下,不容易实现。要使其工作,您可能必须找到一种方法,在PHP中修改服务器的配置文件,然后以某种方式让服务器重新读取这些文件。我没有研究如何用Apache或IIS实现这一点,但对于Google AppEngine,我知道用当前的API是不可能的

    选项3将涉及相当多的编码(除非您可以在某处找到预制解决方案),但可能是最灵活的解决方案


    我不确定,但是,根据您使用的服务器的不同,如果您的服务器提供了一个钩子,您可以在进一步处理传入请求之前使用它来检查它们,那么甚至可以在选项2和选项3之间实现一个混合选项。

    您有两个选择:

  • 如果源IP包含在您管理的某个黑名单中,只需通过请求失败,就可以在PHP中自己实现IP阻塞
  • 以某种方式告诉您的服务器程序(Apache、IIS等)在接受传入连接之前阻止请求
  • 为自己编写一个非常简单的代理,如果HTTP请求不是源于黑名单上的IP,它将接受HTTP请求,检查ID的语义有效性,管理黑名单,并将可接受的请求转发到实际的Web服务器
  • 选项1相当直截了当:维护一个黑名单,对照黑名单检查传入的请求,并根据需要使它们失败。您可以在此处找到更多信息,包括一个简单的代码示例:

    选项1的问题在于,它并没有真正为您节省任何CPU负载,而且可能比DaveRandom建议的简单解析ID并验证它而不是验证源IP更需要计算

    不幸的是,选项2在很大程度上依赖于您正在使用的服务器基础结构,并且在大多数情况下,不容易实现。要使其工作,您可能必须找到一种方法,在PHP中修改服务器的配置文件,然后以某种方式让服务器重新读取这些文件。我还没有研究如何用Apache或IIS实现这一点,但对于Google AppEngine,我知道这在cu中是不可能的