我的GET表单在PHP中出现问题

时间:2010-09-21 11:48:55

标签: php

我最近做了一个GET表单。但问题是它非常容易受到攻击。你可以按如下方式注入脚本。

http://mysite.com/processget.phtml?search=<a href="http://google.com">Hacked</a>

我能够将任何类型的脚本注入上面的URL。我实际上是在我的BODY中使用echo回显我的GET数据,因此每当我输入恶意脚本时,它都会在我的BODY标签中执行。所以现在我如何将这个http://mysite.com/processget.phtml?search=限制为我想要的数字,字母和几个符号。

对于ex。用户应该只能输入

http://mysite.com/processget.phtml?search=A123123+*$

所以你可以帮助我修复这个bug。我是PHP的新手,所以请解释一下。

3 个答案:

答案 0 :(得分:2)

if (!empty($_GET['search'])) {
    $search = htmlentities($_GET['search'],ENT_QUOTES,'UTF-8');
    echo $search;
}

现在安全了。

但是如果你想限制特定的符号,那么你需要使用正则表达式。

答案 1 :(得分:1)

您可以让用户输入您喜欢的任何内容;关键是逃避输出。然后根据需要显示字符串,而不是作为HTML包含。

使用像htmlentities

这样的php函数

答案 2 :(得分:0)

剥离标签:

echo strip_tags($_GET['search']);

实际上,您可能需要 htmlspecialchars ,它会转义标记而不是删除它们,以便它们按预期显示:

echo htmlspecialchars($_GET['search']);