我有一个在网址中有id =的网页。问题是,这吸引了大量不受欢迎的黑客试图操纵网址,例如id = 133 + 1--顺序(遗憾地改变id不是一个选项)
我有以下代码来获取id并删除任何'badness'。
$ia = intval($_GET['id']);
$ib = mysql_real_escape_string($ia);
$ic = strip_tags($ib);
但我真正想要做的是禁止用户的ip地址x一段时间。这样一来,如果他们永远是一个安全漏洞,它会让我有时间检测它并在黑客面前修复它(更好的是安全而不是抱歉!)
还有其他不必要的CPU使用情况,我想排除它。
有没有人知道一个php脚本可以根据url操作检测和阻止ip一段时间?或者更好的是,有人想要展示他们已经制作的基本例子吗?
答案 0 :(得分:1)
您有几个选择:
选项1非常简单:维护黑名单,检查对其的传入请求,并根据需要将其失败。您可以在此处找到更多信息,包括一个简单的代码示例:http://perishablepress.com/how-to-block-ip-addresses-with-php/
选项1的问题在于它并没有真正为您节省任何CPU负载,并且可能比DaveRandom建议简单地解析ID并验证它而不是源IP的计算更多。
遗憾的是,选项2在很大程度上取决于您使用的服务器基础架构,在大多数情况下,将无法轻松实现。为此,您可能必须找到一种方法来修改PHP中的服务器配置文件,然后以某种方式让服务器重新读取这些文件。我还没有研究如何使用Apache或IIS实现这一点,但对于Google AppEngine,我知道当前的API无法实现这一点。
选项3将涉及相当多的编码(除非您可以在某处找到预制解决方案),但应该是最灵活的解决方案。
我不确定,但是,根据您使用的服务器,甚至可以在选项2和3之间实现混合,如果您的服务器提供了一个钩子,您可以使用它来检查传入的请求,然后再进一步处理它们
答案 1 :(得分:0)
您可以从超全局变量$_SERVER
获取所有必要的数据,您可以使用REMOTE_ADDR和REMOTE_HOST键(更多信息in the manual)。
要阻止某人,您可以将此值与之前保存的值进行比较。您可以将它们保存在任何地方,例如数据库(最简单的解决方案)或外部文件。为了更安全,服务器不应访问此文件。
然而,这不是一个完美的解决方案,因为可能会改变IP地址和动态设置的问题。
在您的数据库/文件中,您可以添加“expires”之类的字段,以及之后可以允许用户的时间。
但正如我在评论中所述,我不会阻止任何人。正如@DaveRandom编写的那样,您可以简单地将id
转换为整数,以防止SQL注入。请记住,您应该考虑从客户端获得并处理的所有变量,$_POST
也是如此。