PHP中的过滤器,提升你的代码的安全价值
时间:2009-12-12
来源:互联网
[作者:Marc Steven Plotz
翻译: wxysky]
你可能经常听到关于php的最大的弱点是“简单”,我是一个php的程序员,可能直到我死的那天也会一直是(╮(╯3╰)╭原作者好牛比哦) 。唉,我们常常看到这里是好的代码,那里是一些坏的代码,这篇文章将确保你的代码归类为好的哪一类中(╮(╯▽╰)╭。口气不小。。)
开发者论坛上最有趣的讨论,大概就是关于php是否是一个“真正”的程序开发语言了,显然这是在表述php永远比不上java的能量。因为php是一个弱类型语言。很好,是的,但是你是否记得PHP从来没有想被设计为一个java的克隆。php并不是一个固态(solid-state)系统,它一般仅仅被执行几秒- 当页面被载入完成后—这时它被停止执行—就这些了。。这就是例如 GET, POST 和SESSION 在php所需要做的事情那样: 在一个非固态系统中,你需要通过它们保存从一个页面到下一个页面需要保存的信息。所以PHP被用来设计实现它们,。 前面提到过,PHP是一个弱类型语言—IF YOU CODE IT TO BE LIKE THAT, 所以需要从一开始决定它是否正确,是要由人的设计和执行决定的。这个准则同样适合你的验证技术。
在一个站点的开发中,验证可能是最重要的一个事情了,在你的网站的每一个和用户进行交互的应用中,忘记验证,往往是常见的错误。通过我的切身体验,我知道处理验证是个很痛苦的工作。。而现在你可以忘掉痛苦,高枕无忧了: PHP 内置的验证功能,已经为你做好了一切:
PHP过滤器是一个PHP的扩展,帮助你更容易,并且可靠的验证字符串和变量,这样,你就永远不会有可能对下面语句而担心受怕了:
<?php
include($_GET[‘filename’])
?>
甚至更坏的情况:
<?php
mysql_query(“INSERT INTO table (field) VALUES ({$_POST[‘value’]} “);
?>
变量过滤
通过使用过滤器来过滤变量,你可以使用 filter_var() 函数, 让我们来尝试验证一个变量是否为一个整形,例如:
$variable = 1122;
eecho filter_var($variable,FILTER_VALIDATE_INT);
因为这个变量里保存的是个整形,所以代码讲显示 1122. 如果我们的变量值为”a344”, 屏幕上将不会打印出任何内容,因为验证失败了。
好,好的,也许你说这无非一个有趣的把戏罢了,但是,还有更多, 让我们看看,当我们想确认我们的变量是个整形,它的范围在5到10之间,我们怎么做:
<?php
$variable = 6;
$minimum_value = 5;
$minimum_value = 10;
echo filter_var($variable,FILTER_VALIDATE_INT,array(“option”=>array(“min_range”=>$minimum_value,”max_range”=>$maximum_value)));
?>
这样,这个变量则必须在范围之内—就像上面的例子那样—数字6将会被显示在屏幕上。
php提供了一个真正的很好的方法来检测浮点值—对于我们来说最有用的就是在构建购物车的时候用来检查值是否有两位小数点。 例如下面将会显示”31.53”是一个合法的浮点数。
<?php
$num = 31.53;
if(filter_var($num,FILTER_VALIDATE_FLOAT)===false){
echo $num.” 是合法的”;
}else{
echo $num “ 是个不合法的浮点数”;
}
尝尝验证一个URL的格式? 你可能需要去查看RFC1738规范,然后打开你的PHP文本编辑器编写一个类,来验证它,这可能需要上千行代码,对不?
好了,实际上,PHP可以通过URL过滤器自动帮你做到这些:
<?php
$url = http://www.somewebsite.domain;
if(filter_var($url,FILTER_VALIDATE_URL) === FALSE){
echo $url.” 不是个合法的 URL<br />”;
}else{
echo $url.” 是个合法的URL<br/>”;
}
现在,你可能说,你说的这些东西对我没用: 邮件验证,对它的验证你肯定得通过正则表达式,不对么? 错了! PHP的FILTER_VALIDATE_EMAIL 可以使它变得非常简单,甚至不费吹灰之力:
<?php
$email = [email protected];
if(filter_var($email,FILTER_VALIDATE_EMAIL) === false){
echo $email.” 不合法”;
}else{
echo $email.” 合法”;
}
现在,你是不是觉得可以花时间来了解一下它呢?电子邮件验证是个大难题,特别对于初学者来说,以我看来,我们应该以拥有它们感到幸福。。。
但是,这些还仅仅不够,让我们在做些其他的是,比如删除字符串的HTML标签,怎样:
<?php
$string = “<p>text</p>”;
echo filter_var($string,FILTER_SANITIZE_STRING);
?>
这样,我们将得到一个不带标签的”text”;
结论:
在这里,我们看到了PHP过滤器可以做到的几个例子,当然最重要的是验证你的代码—就像我们所有知道的那样,但是实际怎么做确实另一回事。 我只想在这里给你,给写代码的朋友,无论你是个新手还是专家—一个被肯定的验证方式,来帮助你从坏的代码逐渐旅行到好的代码中来。你的代码一定是最好的,你可以做到!
作者: wxysky 发布时间: 2009-12-12
作者: hjxwsad 发布时间: 2009-12-12
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28