如何禁用' - ; :~`来自输入并从字符串中删除?

时间:2014-09-12 21:23:28

标签: php

我试图通过删除特殊字符来增加额外的安全性。我想允许字母,数字和? =&仅

我试过了:

if (strpos($_SERVER['REQUEST_URI'],'\'')) {  echo 'true';   }

我不能简单地把'介于'之间'因为它打破它所以我尝试添加\但它没有用。 有没有办法检测url字符串或输入字段中的所有符号?

编辑:

尝试添加<只需进入列表

if (preg_match('#[@*,!$\'\-;:<>~`^|\(\\)\\{\\}\\[\\]]#i', $_SERVER['REQUEST_URI']) || strpos($_SERVER['REQUEST_URI'],'script')) { 
    echo 'Cannot do that';
}

我尝试在其中添加([\<])([^\>]{1,})*([\>]),但它无效。 我还尝试在strcmp($_SERVER['REQUEST_URI'], strip_tags($_SERVER['REQUEST_URI'])) != 0

时添加条件

当我加入网址时,它没有做任何事情

3 个答案:

答案 0 :(得分:1)

使用preg_match测试除了您想要的字符之外的任何内容:

if (preg_match('#[^a-z0-9?=&]#i', $str)) { echo 'true'; }

使用preg_replace删除它们:

$str = preg_replace('#[^a-z0-9?=&]#i', '', $str);

如果您只想禁止某些字符,请使用与这些字符匹配的正则表达式:

if (preg_match('#[\'\-;:~`]#i', $str)) { echo 'true'; }

答案 1 :(得分:0)

你可以使用双引号作为字符串分隔符来修复它,试试这个

if (strpos($_SERVER['REQUEST_URI'],"'")) {  echo 'true';   }

答案 2 :(得分:0)

有些帖子没有解决为什么strpos不适合你。 strpos可以返回两种类型。它可以返回一个大于或等于零的整数。 0是第一个角色。它还可以返回布尔类型false。要检查strpos是否找到匹配项,必须按照以下方式编写:

if (strpos($_SERVER['REQUEST_URI'],'\'') !== false) {  echo 'true';   }

来自PHP Documentation比较$a !== $b运算符以这种方式工作:

  如果$ a不等于$ b,则

返回TRUE,或者它们的类型不同。

有关strpos返回两种类型(布尔false或整数)的信息可在此PHP strpos Documentation中找到。特别是:

  

返回针存在于相对于haystack字符串开头的位置(与offset无关)。另请注意,字符串位置从0开始,而不是1。

     

如果未找到针,则返回FALSE。

因此,您可以看到0和false不同,这就是您的测试失败的原因。

至于PHP中的安全性和字符串,我建议您查看此StackOverflow article以获取有关此事的一些意见。