.htaccess禁止IP或IP段访问

连续半个月了。。受够了几个IP段的流氓留言,决定把几个IP端拉入禁止访问列表

可以通过.htaccess作用来设置禁止访问的IP和IP段。

Order Allow,Deny
Deny from 92.241.169
Allow from all

.htaccess禁止IP
的话直接某个IP,禁止IP段
的话就是:Deny from 92.241.169。(92.241.169.1-92.241.169.254)

效果就是访问显示:

Forbidden

You don't have permission to access / on this server.

Additionally, a 403 Forbidden error was encountered while trying to use an ErrorDocument to handle the request.

PHP5 数据过滤 - PECL filter扩展

数据过滤 - PECL filter扩展

PHP 5的PECL扩展库提供了一个新功能-filter扩展。使用filter可以极大的简化表单验证的编码量,尤其是对PHP新手而言,对提高程序的安全性很有帮助,从而远离SQL注入和不充分的字符过滤处理。

可以到http://pecl.php.net/package/filter下载最新的版本。在编写本书时它仍处于beta版本。filter软件包提供了数据类型验证和数据编码两个功能,它提供以下几个主要函数:

filter_data——用于过滤数据;
filter_input——用于表单提交内容的过滤;
filter_var——变量内容的过滤,与filter_data和is_int()标准函数类似。

这3个函数绝大部分的功能都很类似,只不过应用于不同的场合,它们使用的参数也是通用的,如表5-5所示。

表5-5



常量名称

   

FILTER_VALIDATE_INT

验证为整数,可以指定范围

FILTER_VALIDATE_FLOAT

验证为浮点数

FILTER_ VALIDATE_REGEXP

匹配一个PCRE正则表达式模式

FILTER_ VALIDATE_URL

匹配一个URL

FILTER_ VALIDATE_EMAIL

匹配一个email地址

FILTER_SANITIZE_STRING

去除超文本标签

FILTER_SANITIZE_ENCODED

对字符串使用URL编码

FILTER_VALIDATE_IP

验证值是否为IP地址


下面举例说明,请见如下脚本:


<?php
var_dump(filter_data('dujiang@ikang.com', FILTER_VALIDATE_EMAIL));
var_dump(filter_data('sobooo.com', FILTER_VALIDATE_EMAIL));
?>


该脚本会输出如下的内容:


string(15) "dujiang@ikang.com"
NULL

由于字符串“sobooo.com”因为不是邮件地址的格式,因此被过滤后,显示为NULL值。
再看下面使用filter_input验证表单的脚本例子:


<?php
// 如使用FILTER_VALIDATE_INT验证用户输入的QQ号码,表单有一个文本框名字为qq:
$qq = filter_input(INPUT_POST, 'qq', FILTER_VALIDATE_INT);
if (!empty($qq)) {
echo "<p>您的QQ号码: $qq</p>\n";
} else {
echo '<p>请输入正确的QQ号码(应为纯数字)</p>';
}

//使用URL 编码
$url = "http://post.sina.com.cn/file.php?a=1&b=编码";

//显示被编码后的URL地址
echo filter_var($url, FILTER_SANITIZE_ENCODED);
?>
第3个例子比较实用,这个脚本代码可验证IP是否正确,并确认是否是内部网IP,代码如下所示。
<?php
// 验证IP v4地址
$ip = "192.168.0.23";

if(filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4) === False){
echo "$ip 是非法IP地址";
}else {
echo "$ip 是正确的IP地址";
//验证IP是公网IP还是私有IP地址
if(filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE) === FALSE)   
{
echo "$ip 为内部网私有IP地址";
}else{
echo "$ip 为公网IP地址";
}
}
?>


因为PHP 5.2之后已经捆绑了filter扩展,但这一功能一直在升级,你可以查看最新的input_filter动态以及源代码,包括PHP创始人lerdof的个人


标签: 表单, 脚本, IP, filter