- 浏览: 7937033 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (2425)
- 软件工程 (75)
- JAVA相关 (662)
- ajax/web相关 (351)
- 数据库相关/oracle (218)
- PHP (147)
- UNIX/LINUX/FREEBSD/solaris (118)
- 音乐探讨 (1)
- 闲话 (11)
- 网络安全等 (21)
- .NET (153)
- ROR和GOG (10)
- [网站分类]4.其他技术区 (181)
- 算法等 (7)
- [随笔分类]SOA (8)
- 收藏区 (71)
- 金融证券 (4)
- [网站分类]5.企业信息化 (3)
- c&c++学习 (1)
- 读书区 (11)
- 其它 (10)
- 收藏夹 (1)
- 设计模式 (1)
- FLEX (14)
- Android (98)
- 软件工程心理学系列 (4)
- HTML5 (6)
- C/C++ (0)
- 数据结构 (0)
- 书评 (3)
- python (17)
- NOSQL (10)
- MYSQL (85)
- java之各类测试 (18)
- nodejs (1)
- JAVA (1)
- neo4j (3)
- VUE (4)
- docker相关 (1)
最新评论
-
xiaobadi:
jacky~~~~~~~~~
推荐两个不错的mybatis GUI生成工具 -
masuweng:
(转)JAVA获得机器码的实现 -
albert0707:
有些扩展名为null
java 7中可以判断文件的contenttype了 -
albert0707:
非常感谢!!!!!!!!!
java 7中可以判断文件的contenttype了 -
zhangle:
https://zhuban.me竹板共享 - 高效便捷的文档 ...
一个不错的网络白板工具
,在IBM DW的http://www.ibm.com/developerworks/cn/opensource/os-php-v522/index.html上有很好的介绍,下面笔记并补充之
过滤扩展功能有两种过滤器:Sanitizing 和 Logical。
Sanitizing 过滤器只是允许或禁止字符串中的字符并将清理后的字符串作为结果返回。无论您将哪种数据格式传入这些函数,它们将始终返回字符串。对于特定类型的使用,这是至关重要的,因为您可以阻止用户发送不适当的输入并导致异常结果。例如,用户可以发现文本块的输入被返回到以下页面上并且要利用那些返回信息。如果清理输入,则将删除输入的所有危险部分。
Logical 过滤器将对变量执行测试并根据测试提供 true 或 false 结果。然后您可以使用结果来决定如何处理数据或获得用户的地址。这种过滤器的简单示例是验证年龄。逻辑测试还可以针对类似 Perl 的正则表达式进行测试。
<?php
echo "You are " . filter_var($_GET['1'], FILTER_SANITIZE_STRING) . ".<br>\n";
echo "Your favorite color is " . filter_var($_GET['2'], FILTER_SANITIZE_STRING) .
".<br>\n";
echo "The airspeed of an unladen swallow is " . filter_var($_GET['3'], FILTER_SANITIZE_STRING)
. ".<br>\n";
?>
用 filter_var()
函数来清理输入并使其有效并且安全。在这种情况下,使用选项 FILTER_SANITIZE_STRING
,该选项将获取输入、删除所有 HTML 标记并选择性地编码或删除特定字符。
由于它将除去 HTML 标记,因此尝试运行 JavaScript 将失败,并且从脚本中获得更适当的结果。
再补充些
PHP: indicates the earliest version of PHP that supports the function.
filter_has_var() | Checks if a variable of a specified input type exist | 5 |
filter_id() | Returns the ID number of a specified filter | 5 |
filter_input() | Get input from outside the script and filter it | 5 |
filter_input_array() | Get multiple inputs from outside the script and filters them | 5 |
filter_list() | Returns an array of all supported filters | 5 |
filter_var_array() | Get multiple variables and filter them | 5 |
filter_var() | Get a variable and filter it | 5 |
PHP Filters
FILTER_CALLBACK | Call a user-defined function to filter data |
FILTER_SANITIZE_STRING | Strip tags, optionally strip or encode special characters |
FILTER_SANITIZE_STRIPPED | Alias of "string" filter |
FILTER_SANITIZE_ENCODED | URL-encode string, optionally strip or encode special characters |
FILTER_SANITIZE_SPECIAL_CHARS | HTML-escape '"<>& and characters with ASCII value less than 32 |
FILTER_SANITIZE_EMAIL | Remove all characters, except letters, digits and !#$%&'*+-/=?^_`{|}~@.[] |
FILTER_SANITIZE_URL | Remove all characters, except letters, digits and $-_.+!*'(),{}|\\^~[]`<>#%";/?:@&= |
FILTER_SANITIZE_NUMBER_INT | Remove all characters, except digits and +- |
FILTER_SANITIZE_NUMBER_FLOAT | Remove all characters, except digits, +- and optionally .,eE |
FILTER_SANITIZE_MAGIC_QUOTES | Apply addslashes() |
FILTER_UNSAFE_RAW | Do nothing, optionally strip or encode special characters |
FILTER_VALIDATE_INT | Validate value as integer, optionally from the specified range |
FILTER_VALIDATE_BOOLEAN | Return TRUE for "1", "true", "on" and "yes", FALSE for "0", "false", "off", "no", and "", NULL otherwise |
FILTER_VALIDATE_FLOAT | Validate value as float |
FILTER_VALIDATE_REGEXP | Validate value against regexp, a Perl-compatible regular expression |
FILTER_VALIDATE_URL | Validate value as URL, optionally with required components |
FILTER_VALIDATE_EMAIL | Validate value as e-mail |
FILTER_VALIDATE_IP | Validate value as IP address, optionally only IPv4 or IPv6 or not from private or reserved ranges |
检测判断的例子
1 | <html> |
2 | <head></head> |
3 | <body |
4 | <form action="example04.php" method="post" > |
5 | Enter your age: <input name="age" size="2"> |
6 | <input type="submit" name="submit" value="Go"> |
7 | </form> |
8 | </body> |
9 | </html> |
view plain | print | copy to clipboard | ? |
处理脚本:
1 | <?php |
2 | if (!filter_has_var(INPUT_POST, 'submit')) { |
3 | echo "form"; |
4 | // include the form. |
5 | } |
6 | |
7 | $age = filter_input(INPUT_POST, 'age', FILTER_VALIDATE_INT); |
8 | if (is_null($age)) { |
9 | echo "The 'age' field is required.<br />"; |
10 | } elseif ($age === FALSE) { |
11 | echo "Please enter a valid age.<br />"; |
12 | } else { |
13 | echo "Welcome.<br/>"; |
14 | } |
15 | ?> |
view plain | print | copy to clipboard | ? |
filter_has_var检测给定的变量是否存在。它不会做任何处理只会告诉程序变量是否已经设置。相当于isset($_POST[‘submit’])。filter_input会取得一个变量返回处理好的数据。在上面的例子中会返回一个整数。
如果是要返回一个处于一定范围之内的值,假设是7-77岁之间的人。可以指定一个最大值和一个最小值。
1 | <?php |
2 | if (!filter_has_var(INPUT_POST, 'submit')) { |
3 | echo "form"; |
4 | // include the form. |
5 | } |
6 | $options = array('options'=> array('min_range'=>7, 'min_range'=>77)); |
7 | $age = filter_input(INPUT_POST, 'age', FILTER_VALIDATE_INT, $options); |
8 | |
9 | if (is_null($age)) { |
10 | echo "The 'age' field is required.<br />"; |
11 | } elseif ($age === FALSE) { |
12 | echo "You must be enter a valid age and be between 7 and 77 years old.<br />"; |
13 | } else { |
14 | echo "Welcome.<br/>"; |
15 | } |
16 | ?> |
view plain | print | copy to clipboard | ? |
如果是要判断一个有效的邮件地址的话,可以这样:
1 | $email = filter_input(INPUT_POST, 'email', FILTER_VALIDATE_EMAIL); |
view plain | print | copy to clipboard | ? |
如果邮件地址不正确或者是空的话$email的值将为FALSE。
过滤判断的例子
1 | <html> |
2 | <head></head> |
3 | <body> |
4 | <form action="example05.php" method="post" > |
5 | Enter your name: <input name="name" size="50"> |
6 | <input type="submit" name="submit" value="Go"> |
7 | </form> |
8 | </body> |
9 | </html> |
view plain | print | copy to clipboard | ? |
下面的filter_input函数将自动过滤并返回适当的值:
1 | <?php |
2 | if (!filter_has_var(INPUT_POST, 'submit')) { |
3 | echo "form"; |
4 | // include the form. |
5 | } |
6 | $name = filter_input(INPUT_POST, 'name', FILTER_SANITIZE_SPECIAL_CHARS); |
7 | if (is_null($name)) { |
8 | echo "The 'name' field is required.<br />"; |
9 | } else { |
10 | echo "Hello $name.<br/>"; |
11 | } |
12 | ?> |
view plain | print | copy to clipboard | ? |
如果接收到的name值是:
Johnny Weißmüller <b>Jr</b>
FILTER_SANITIZE_SPECIAL_CHARS 将会返回:
Hello Johnny Weißmüller <b>Jr</b>.
一个更好的过滤写法:
1 | $name = filter_input(INPUT_POST, |
2 | 'name', |
3 | FILTER_SANITIZE_STRING, |
4 | FILTER_FLAG_ENCODE_HIGH|FILTER_FLAG_ENCODE_LOW); |
view plain | print | copy to clipboard | ? |
输出:
Hello Johnny Weißmüller Jr.
这里的函数还有很多选项,如果你想了解更多的细节可以查看Filter的文档。
如何一次处理所有输入?
1 | <html> |
2 | <head></head> |
3 | <body |
4 | <form action="example07.php" method="post" > |
5 | Name: <input name="name" size="50"><br /> |
6 | Email: <input name="email" size="50"><br /> |
7 | Homepage: <input name="homepage" size="50"><br /> |
8 | Age: <input name="age" size="4"><br /> |
9 | Income: <input name="income" size="50"><br /> |
10 | Your two favourites languages: |
11 | <select name="favourites[]" size="6" multiple> |
12 | <option value="haskell">haskell</option> |
13 | <option value="r">R</option> |
14 | <option value="lua">Lua</option> |
15 | <option value="pike">Pike</option> |
16 | <option value="rebol">Rebol</option> |
17 | <option value="php">PHP</option> |
18 | </select><br /> |
19 | <input type="submit" name="submit" value="Go"> |
20 | </form> |
21 | </body> |
22 | </html> |
view plain | print | copy to clipboard | ? |
处理程序:
1 | <?php |
2 | if (!filter_has_var(INPUT_POST, 'submit')) { |
3 | echo "form"; |
4 | // include the form. |
5 | } |
6 | |
7 | $defs = array( |
8 | 'name' => array('filter'=>FILTER_SANITIZE_STRING, |
9 | 'flags' => FILTER_FLAG_ENCODE_HIGH|FILTER_FLAG_ENCODE_LOW), |
10 | 'email' => FILTER_VALIDATE_EMAIL, |
11 | 'homepage' => FILTER_VALIDATE_URL, |
12 | 'age' => array( 'filter' => FILTER_VALIDATE_INT, |
13 | 'options'=> array('min_range'=>7, 'min_range'=>77)), |
14 | 'income' => FILTER_VALIDATE_FLOAT, |
15 | 'favourites' => array( |
16 | 'filter' => FILTER_SANITIZE_STRING, |
17 | 'flags' => FILTER_REQUIRE_ARRAY |
18 | ), |
19 | ); |
20 | |
21 | $input = filter_input_array(INPUT_POST, $defs); |
22 | |
23 | if ($input['age'] === FALSE) { |
24 | exit("You must be between 7 and 77 years old."); |
25 | } |
26 | |
27 | if (is_null($input['favourites'])) { |
28 | exit("You have to choose two or more languages."); |
29 | } |
30 | |
31 | if (!in_array('PHP', $inputs['favourites'])) { |
32 | exit("You don't like PHP!"); |
33 | } |
34 | |
35 | /*Other checks for required values */ |
36 | ?> |
view plain | print | copy to clipboard | ? |
正如上面例子中的,通过一个函数就能处理所有的变量。唯一不同的就是事先定义一个对应的数组。需要注意的是数组中选项的正确性。
这样的做法不但增加了程序的易读性,并且如果要添加移除或者修改处理规则也会非常方便。
更复杂的处理
在下面的处理“favourites”变量时用到了用户自定义函数。"options"指定一个用户自定义函数通过定义callback来实现,语法和PHP的call_user_func一样。
1 | <?php |
2 | class language { |
3 | function __construct($name) { |
4 | $this->name = $name; |
5 | } |
6 | } |
7 | |
8 | function check_languages($var) { |
9 | static $called = 0; |
10 | $called++; |
11 | echo "called: $called: $var<br />"; |
12 | $var = filter_var($var, FILTER_SANITIZE_STRIPPED); |
13 | $l = new language($var); |
14 | return $l; |
15 | } |
16 | |
17 | if (!filter_has_var(INPUT_POST, 'submit')) { |
18 |
发表评论
-
git学习小结
2017-01-23 20:14 599http://www.liaoxuefeng.com/wiki ... -
国内IT技术大会小结
2012-06-15 12:47 3429搞IT的就要多交流,这个应该成为大家的共同认识,比如国内目前有 ... -
国内IT技术大会小结束
2012-06-15 12:44 0搞IT的就要多交流,这个应该成为大家的共同认识,比如国内目前有 ... -
国内IT技术大会小结束
2012-06-15 12:42 0搞IT的就要多交流,这个应该成为大家的共同认识,比如国内目前有 ... -
神奇的“触觉振动”:谈W3C的震动API
2012-02-17 12:28 2118说起“触觉反馈”,大家可能从字面上并不能理解它是如何工作的。触 ... -
Chrome赶超IE:谷歌为何再度联手火狐
2011-12-27 20:16 2430http://tech.it168.com/a2011/122 ... -
(转10款难看但好用的SEO工具
2011-09-07 06:53 1391人不可貌相,SEO工具也不例外。 SEO专业网站SEOmoz ... -
一个很好的开源CRM项目
2005-01-15 19:56 1629http://www.sugarcrm.com,还有简体中文包 ... -
PHP中得到指定的时间段
2005-01-15 19:59 1946最近在项目中,遇到个比较特殊的要求,比如,MYSQL中,比如今 ... -
给大家推荐一个SQL好的站点
2005-01-15 20:20 1122,给大家推荐一个SQL好的站点 http://sqlteam. ... -
记得打补丁
2005-04-14 19:33 1041之前遇到个很怪的问题: 买了个新硬盘,160G,重新装了VS. ... -
express beta 2版本出来了
2005-04-18 11:30 1047在没下到VS。NET 2005之前,也可以用轻量级的EXPRE ... -
SQL SEVER 2005 CTP APRIL出来了
2005-04-20 20:02 1077http://lab.msdn.microsoft.com/e ... -
ms reporting service sp2 出来了
2005-04-24 08:27 1201SQL Server 2000 Reporting Servi ... -
php5 读书心得(1)
2005-04-25 19:48 1154由于工作中要用到PHP,最近下了本《PHP5 POWER PR ... -
PHP5 心得(2)
2005-04-28 19:41 1182在OOP中,构造函数和析构函数是很重要的,在PHP4中,可 ... -
vs.net 2005 beta 2安装问题
2005-04-28 22:50 1196我之前已经卸载了BETA 1了,但可惜安装后,在新建工程后,还 ... -
PHP5心得3
2005-04-29 20:47 1131今天讲的是parent::和self::两个新的关键字。se ... -
PHP5心得4
2005-05-01 17:11 11561 instanceof操作 该操作中,判断某个类是 ... -
vs 2005中的 Visualizer debugger
2005-05-05 21:01 1144在vs.net 2005 中,增加了可视化的调试器,甚至可以自 ...
相关推荐
PHP 5.2 标准课程初级函数-2
PHP 5.2 标准课程初级函数-1
PHP 5.2 标准课程初级函数-1_1
PHP 5.2 标准课程初级函数-1_2
§5.2有界变差函数[归纳].pdf
这份"PHP 5.2中文手册"是开发人员不可或缺的参考资料,它详细介绍了PHP 5.2的所有核心概念、语法和函数,帮助开发者更深入地理解和应用PHP语言。 一、PHP基础 PHP是一种广泛使用的开源服务器端脚本语言,尤其适用于...
- Filter_var 函数:用于过滤和验证输入数据,增强了安全性。 2. Zend Engine 知识点: - Zend Engine 是 PHP 的核心,负责解释和执行 PHP 代码。在 PHP 5.2 中,Zend Engine 已经进化到第二代(Zend Engine 2)...
sudo apt-get install php5 php5-common php5-cli php5-dev php5-mysql phpmyadmin php5-pgsql phppgadmin php5-gd php5-mcrypt php5-curl php-pear libapache2-mod-php5 php5-xdebug php5-codesniffer ``` 2. *...
中文php.ini php5.2 php优化
extension=libpdf_php_for PHP5.2.x.dll 添加效果: ;extension=php_ibm_db2.dll ;extension=memcache.dll extension=libpdf_php_for PHP5.2.x.dll ;;;;;;;;;;;;;;;;;;; ; Module Settings ; ;;;;;;;;;;;;;;;;;;; ...
6. **过滤器**:PHP 5.2增加了输入过滤器,用于验证和清理用户输入,提高了应用程序的安全性。 7. **JSON支持**:JavaScript Object Notation (JSON) 是一种轻量级的数据交换格式,PHP 5.2开始内置了对JSON的编码和...
PHPUTF-8是一个PHP的扩展,提供了一组函数来处理UTF-8编码的字符串。当ODBTP结合PHPUTF-8使用时,用户可以更好地在PHP中处理和操作非ASCII字符,确保数据的完整性和一致性。 PHP SQL Server连接通常依赖于特定的...
《PHP 5.2与Apache 2.2的集成配置详解》 PHP 5.2是PHP编程语言的一个较早版本,它在当时的Web开发领域扮演了重要角色,提供了丰富的功能和良好的性能。Apache 2.2则是一款广泛应用的开源Web服务器软件,两者结合...
PHP5.2是PHP语言的一个历史版本,发布于2006年,直到2011年停止了安全更新,2017年底正式终止支持。这个版本在当时具有里程碑意义,因为它引入了许多新特性,同时也对代码性能进行了优化。在Windows环境下运行PHP5.2...
标题中的“php5.2redis扩展.rar”表明这是一个与PHP 5.2版本相关的Redis扩展压缩包,适用于Windows操作系统。Redis是一种高性能的键值数据存储系统,常用于缓存、数据库和消息中间件等场景。PHP的Redis扩展使得...
CHM文件是Windows系统的帮助文件,包含了PHP5.2的所有函数、类和常量的详细文档,是学习和解决问题的重要参考资料。 **phpStudy(PHP5.2).exe** 这是PHPStudy的安装程序,用户可以通过双击执行这个文件来安装整个...
所以如果需要配置PHP5.2环境,必须单独下载本文件才能正确配置。 注意:本文件仅适用于PHP 5.2 TS(线程安全)版本。不适合NTS,不适合PHP5.3 PHP5.4 如果需要PHP5.3 或PHP5.4 请下载我另外上存的资源。
标题 "php5.2+php_redis.dll" 指的是在PHP 5.2版本下,为了连接并操作Redis分布式数据库而需要的一个扩展模块。这个扩展是PHP与Redis交互的关键,它允许PHP脚本通过一个名为`php_redis.dll`的动态链接库与Redis...
九年级数学下册第5章二次函数5.2二次函数的图像和性质第1课时作业pdf无答案新版苏科版
- **索引管理**:`createIndex()`, `ensureIndex()`, `dropIndex()`等函数用于创建、检查和删除索引,以优化查询性能。 - **游标**:查询结果通常返回一个游标对象,如`MongoCursor`,它可以遍历查询结果,实现分页...