肇庆信息港网上电脑城域名注册SNS社区明星写真笑话天地健康频道

娱乐新地带论坛  

返回   娱乐新地带论坛 > 电脑技术 > 『程序设计』

『程序设计』 不太懂编程,主要用来搜集例子,源码等...

发表新主题 回复
 
主题工具 显示模式
旧 2008-05-26, 01:06 AM   #1
No1
Tony
坛主
级别:120 | 在线时长:15016小时 | 升级还需:109小时级别:120 | 在线时长:15016小时 | 升级还需:109小时级别:120 | 在线时长:15016小时 | 升级还需:109小时级别:120 | 在线时长:15016小时 | 升级还需:109小时
 
Tony 的头像
 
注册日期: 2003-10-22
帖子: 11,033
积分:6
精华:24
现金:14292金币
资产:29325249金币
Tony 是一位成功的新星Tony 是一位成功的新星Tony 是一位成功的新星Tony 是一位成功的新星
禁用IP的mysql+php设计

安全,这是很多网页程序设计都要面临的问题。
禁用IP是安全的一部份。下面就分析下禁止IP的php+mysql的程序设计,不足之处,请大家提出意见。

就来个简单的例子来说明一下。
PHP 代码:
CREATE TABLE `banned` (
  `
ip_startint(10NOT NULL default '0',
  `
ip_endint(10NOT NULL default '0',
TYPE=MyISAM COMMENT='禁止IP列表'
上面是新建一个数据表,表有两个字段用来记录要禁用IP的起始。ip_tart是开始,ip_end是结束。ip_start的值要比ip_end值小或相等。范围 是0~4294967295。如果只有一个IP,那么这条记录ip_start与ip_end的字段值相同。

注意,这两个字段都是以int类型出现的,为什么呢?因为一个ip是可以转换为一个相对应的十进制数字。数字大小的对比占有很强的优势。

下例输入一个禁止的IP。127.0.0.1
INSERT INTO `banned` (`ip_start`, `ip_end`) VALUES (INET_ATON( '127.0.0.1' ),INET_ATON( '127.0.0.1' ));
如果要禁用一段IP,如192.168.1.1~192.168.255.2255
INSERT INTO `banned` (`ip_start`, `ip_end`) VALUES (INET_ATON( '192.168.1.1' ),INET_ATON( '192.168.255.255' ));

我们可以从数据表中看到,上面插入的记录的 ip_start与ip_end字段值是2130706433。因为mysql的函数INET_ATON将ip转为了数字形式。

现在,禁止一个IP,只要看一下,这个IP是不是在这个数据表里所包函的一条记录。
PHP 代码:
$ip '127.0.0.1';
$sql "SELECT count(*)         FROM `banned` WHERE ip_start  >=INET_ATON('$ip') and ip_end <= INET_ATON('$ip') ";
$result =  mysql_query($sql);
$banned mysql_fetch_array($result);
echo 
$banned[0] ? "禁止IP" "通行IP" 
Tony 当前离线  
回复时引用此帖
旧 2008-05-26, 01:10 AM   #2
No1
Tony
坛主
级别:120 | 在线时长:15016小时 | 升级还需:109小时级别:120 | 在线时长:15016小时 | 升级还需:109小时级别:120 | 在线时长:15016小时 | 升级还需:109小时级别:120 | 在线时长:15016小时 | 升级还需:109小时
 
Tony 的头像
 
注册日期: 2003-10-22
帖子: 11,033
积分:6
精华:24
现金:14292金币
资产:29325249金币
声望: 395
Tony 是一位成功的新星Tony 是一位成功的新星Tony 是一位成功的新星Tony 是一位成功的新星
tips:
ip转换应采用php的ip2long函数,尽量不要用mysql的函数对数据做处理,会降低性能。
查询时先转换成一个变量,这样效率能高一点:)
$key=sprintf("%u", ip2long($ip));
$sql = "SELECT count(*) FROM `banned` WHERE ip_start >='$key' and ip_end <= '$key' ";
Tony 当前离线  
回复时引用此帖
发表新主题 回复

书签

主题工具
显示模式

发帖规则
不可以发表新主题
不可以发表回复
不可以上传附件
不可以编辑自己的帖子

启用 BB 代码
论坛启用 表情符号
论坛启用 [IMG] 代码
论坛禁用 HTML 代码

论坛跳转


所有时间均为北京时间。现在的时间是 04:26 PM


©2003-2019 1819.net All rights reserved.
粤ICP备05007272号