2012-07-16 31 views
1

我遇到了一个特殊字符问题,我使用该脚本执行命令向我的游戏服务器发送用户名以奖励他们进行投票。如何从GET提交中删除特殊字符

<form action="index.php" method="GET"> <input type="submit" value="Submit" /> </form>

它提交到正确的信息特殊字符和所有的数据库 - 但是当执行到我的游戏服务器就否定了特殊字符,他们可以通过使用名称Testusername /或Testusername滥用它//和每天获得多个奖励。

我试过使用隐藏类型,但我的系统无法使用POST。

任何想法?我很无奈。

编辑*

任何0-9 _ AZ字符允许的特殊字符为!@#$%^ * &()_ +} {}等我使用逃生字符串和我不担心sql注入我尝试了多种消毒方式,他们都失败了。我使用的是mySQL,但不是用于发送作为日志的奖励,并且验证在过去24小时内没有投票并阻止他们再次进行投票的用户。基本上说,他们投票用户名测试,并得到他们的奖励和投票用户名测试/和它说测试投票再次游戏和接收X2奖励

+0

你是什么意思的特殊字符?喜欢......口音? UTF-8?或者像*&^ $这样的字符! @#)({} []等等?你真的需要小心在数据库中允许使用特殊字符,确保使用php的内建函数来保护你的SQL免受注入。[mysqli_escape_string()](http:/ /us3.php.net/manual/en/function.mysqli-escape-string.php) [stripslashes()](http://us3.php.net/manual/en/function.stripslashes.php)我们真的需要更多的信息来帮助你从你给我们的总体概述来看,问题出在逻辑本身上如果你使用的是MySQ – CrazyVipa 2012-07-16 17:50:28

+0

你知道远程服务器上允许使用哪些字符和序列吗?你可能需要将允许的字符列入白名单,而不是删除特定的字符,数据的来源(GET/POST)是无关紧要的,这将有助于更多地了解:*“当执行到我的游戏服务器时否定特殊字符“* – 2012-07-16 17:56:54

+0

http://www.youtube.com/watch?v=T15IkJhVpvg有趣的过滤教程,FYI。 – Brant 2012-07-17 19:58:19

回答

2

简单preg_replace应该这样做:

$username = preg_replace('#[^a-z0-9_]#', '', $username); 

这条一切,但:

  • 小写字母字符
  • 数字0到9
  • 下划线

如果大写是OK,再加入到A-Z正则表达式,或者strtolower()输入预先。在保存输入或将其发送到其他服务器之前执行此操作。

我对于游戏服务器的确切困境有点不确定,但理想情况下,您应该从其他服务器获取响应,以查看保存之前实际输入的用户名,而且您不必完全过滤它,因为您将从其他服务器获得已过滤的值。

+0

正则表达式的第一个参数是什么?如果是这样,很酷。我不知道它将正则表达式作为一个参数。 – Brant 2012-07-16 18:23:11

+0

是的,这是正确的:http://php.net/manual/en/function.preg-replace.php * preg_replace - 执行正则表达式搜索并替换* – 2012-07-16 18:27:36

0

这样的事情应该工作..只填充bad_chars数组与所有的坏字符...

array $bad_chars = array('@', '!', '#'); // setup your chars to filter out 

for($i = 0; $i < size_of($bad_chars); $i++) // iterate through them all 
{ 
    str_replace($bad_chars[i], '', $_GET['string_to_be_filtered']); // replace all 
} 
+0

您可能必须首先将$ _GET [...]字符串存储到变量中。 – Brant 2012-07-16 18:13:18

+0

我看到的唯一问题是,有*加载了*个“特殊字符”来解释。 – 2012-07-16 18:17:42

+0

是的,谢谢我已经试过这个 - 这个问题是

0

由于您只想更换斜杠,因此可以使用此功能。

<?php 
$user = $_GET["user"]; 
$user = str_replace("/", "", $user); 
?> 

这是其他岗位的更高效的版本,在我面前:

<?php 
$user = $_GET["user"]; 
$special = array('@', '!', '#'); 
$user = str_replace($special, "", $user); 
?> 
0

可以更换下列隐蔽特殊字符

$formdesc = htmlentities($_POST['formdesc'], ENT_QUOTES, 'UTF-8'); 

希望这将有助于你