2014-09-12 18 views
0

我试图通过删除特殊字符来增加额外的安全性。我想允许字母,数字和?仅限于&。如何禁用' - ; :〜`从输入中移除并从字符串中移除?

我想:

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

,当我加入到URL,它没有做任何事情

+3

为什么不恰当地处理字符串? – 2014-09-12 21:24:59

+1

额外的安全措施是什么?你的剧本应该用于什么? – 2014-09-12 21:25:05

+0

'str_replace()'如果你真的需要使用它 – Class 2014-09-12 21:25:59

回答

1

使用preg_match来测试什么,但字符你想要的:

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

使用preg_replace删除它们:

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

如果你只是想禁止某些字符,你SE,只是相匹配的字符的正则表达式:

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

,如何检查并返回true/false? – OGcode 2014-09-12 21:28:08

+0

使用'preg_match' – Barmar 2014-09-12 21:28:30

+0

顺便说一句,这个网址是否也包含'/'字符? – Barmar 2014-09-12 21:28:59

0

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

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

一两件事,没有任何帖子的讨论就是为什么strpos没”为你工作。 strpos可以返回两种类型。它可以返回一个大于或等于零的整数。 0是第一个字符。它也可以返回一个布尔类型false。要检查是否strpos找到匹配它必须被写成这样:

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

PHP Documentation比较$a !== $b运营商以这种方式工作:

返回TRUE,如果$ a不等于到$ b,或者它们不是同一类型。

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

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

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

所以,你可以看到0和false不是同一件事,这就是为什么你的测试失败。

至于PHP中的安全性和字符串,我建议你看看这个StackOverflow article的一些意见。