Rumah >pembangunan bahagian belakang >tutorial php >php中使用过滤功能的输入验证

php中使用过滤功能的输入验证

WBOY
WBOYasal
2016-07-25 09:10:27967semak imbas
  1. if (isset($_GET["value"])) {
  2. $value = $_GET["value"];
  3. }
  4. else {
  5. $value = false;
  6. }
  7. if (is_numeric($value) && ($value >= 15 && $value // run my code
  8. }
  9. else {
  10. // handle the issue
  11. }
复制代码

这是一个非常基本的例子,我们已经写更多的行,我想看到??的。 首先,因为我们不能确定设置的$ _GET,代码执行适当的检查,使脚本不翻倒。 其次是美元值现在是一个“脏”的变量,因为它已被直接从指定的$ _GET价值的事实。我们需要照顾,不使用美元的价值在代码的其他地方的情况下,我们打破任何东西。 再有就是,16.0 is_numeric()函数是有效的,因为各种语气词它的问题。 最后,我们必须与事实问题,如果声明是了一口采取位,是一个额外的逻辑位通过当你通过代码跟踪工作。 现在比较上面的例子:

  1. $value = filter_input(INPUT_GET, "value", FILTER_VALIDATE_INT,
  2. array("options" => array("min_range" => 15, "max_range" => 20)));
  3. if ($value) {
  4. // run my code
  5. }
  6. else {
  7. // handle the issue
  8. }
复制代码

不会让你感觉温暖和模糊? filter_input()处理的$ _GET值没有被设置,所以你不必强调脚本是否接收正确的信息,或不。 你也不必约担心美元价值是肮脏的,因为它已被证实之前,它已经被分配。 注意现在的16.0不再有效。 最后,我们的逻辑不再复杂。这只是一个快速检查为truthy值(filter_input()如果验证失败,将返回false和null如果没有设置$ _GET [“价值”)。 显然,在一个真实的世界设定,你可以提取数组存储在配置文件中的变量到某个地方,以便可以得到的东西,甚至无需进入业务逻辑改变。华丽! 现在,你可能会想,这可能是有用抢一对夫妇的简单脚本的$ _GET或$ _POST变量,但内部使用的函数或类约?幸运的是,我们有该filter_var() 。 filter_var()函数被引入,同时作为filter_input()做同样的事情。

  1. //这是一个示例函数,不使用这实际上电子邮件,

  2. //那将是愚蠢的。

  3. function emailUser($email) {
  4. mail($email, "Here is my email", "Some Content");
  5. }
复制代码

这里的危险是,有没有试图发送一封电子邮件,从字面上任何值可以存储在停止邮件()函数$电子邮件。这可能会导致无法发送电子邮件,或东西越来越可能在最坏的情况下使用的恶意功能。 我所看到的人做的 ??结果支票的mail() ,这是很好看,如果该函数成功完成,但损害的是时间值返回。 像这样的东西是更加理智:

  1. // This is a sample function, do not use this to actually email,
  2. // that would be silly.
  3. function emailUser($email) {
  4. $email = filter_var($email, FILTER_VALIDATE_EMAIL);
  5. if ($email !== false) {
  6. mail($email, "Here is my email", "Some Content");
  7. }
  8. else {
  9. // handle the issue invalid email address
  10. }
  11. }
复制代码

用了很多例子,包括上述的问题是,他们是基本的。你可能会想,不能用于基本检查以外的任何filter_var()或filter_input() 。并允许你在一个过滤器传递给这些函数称为FILTER_CALLBACK。 FILTER_CALLBACK使您可以通过在您创建将接受被过滤的变量输入功能-这是哪里,你就可以开始,因为有很多的乐趣,你就可以开始自己的业务逻辑应用到您的过滤。 一些潜在的缺陷 这些功能是非常伟大,他们让你做一些真正强大的过滤,我们已经讨论过,可以帮助提高你的代码的安全性和可靠性。但是也有一些潜在的缺点,我会觉得我是失职的,如果我不指出来。 主要缺陷是,只要你的过滤器适用于它的功能是。最后一个例子,使用电子邮件验证-如何处理电子邮件地址改变5.2.14和5.3.3之间FILTER_VALIDATE_EMAIL,即使假设所有的应用程序上运行同一版本的PHP有电子邮件地址,在技术上是有效的,你可能不希望。请确保您知道您所使用的过滤器。 第二个陷阱是,人们认为,如果他们在一些过滤器,然后把他们的代码是安全的。筛选的变量去一些帮助,但它不会使你的代码100%安全不受虐待。我很想谈谈这个问题,但超出了本文的范围和我的字数已经是相当高的! 总结: 我想你在你的代码的一个函数,只有一个,看看会发生什么,当你在不同的数据类型和不同的价值观传递。 然后,我想你申请一些在这里讨论的过滤方法,看看是否有在您的代码如何执行差异。我很想知道你是怎么在评论。



Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn