我试图通过删除特殊字符来增加额外的安全性。我想允许字母,数字和? =&仅
我试过了:
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
当我加入网址时,它没有做任何事情
答案 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以获取有关此事的一些意见。