我遇到了一个特殊字符的问题,我有一个网页脚本执行命令将用户名发送到我的游戏服务器以奖励他们进行投票。
<form action="index.php" method="GET">
<input type="submit" value="Submit" />
</form>
它使用正确的信息特殊字符和数据提交到数据库 - 但是当执行到我的游戏服务器时,它会否定特殊字符,并且可以使用名称Testusername /或Testusername //来滥用它,并且每天都会收到多个奖励。 / p>
我尝试过使用隐藏类型,但我的系统无法使用POST。
有什么想法吗?我很无奈。
编辑 *
任何0-9 _ az字符都允许使用特殊字符!@#$%^&amp; *()_ + [} {}等我正在使用转义字符串而且我不担心sql注入我尝试了多个消毒的方式,他们都失败了。我正在使用mySQL,但不是为了发送奖励它作为日志,并验证在过去24小时内没有投票的用户,并阻止他们再次执行此操作。基本上说明了,他们用用户名Test进行投票并获得他们的奖励并使用用户名Test /投票,并且它表示Test再次投票,并且收到x2奖励
答案 0 :(得分:2)
简单preg_replace
应该这样做:
$username = preg_replace('#[^a-z0-9_]#', '', $username);
这除了以下所有内容:
如果大写正常,则先将A-Z
添加到正则表达式,或者预先将strtolower()
输入。在保存输入或将其发送到其他服务器之前执行此操作。
我对游戏服务器的确切困境有些不确定,但理想情况下,您应该从其他服务器获得响应,以便在保存之前查看实际输入的用户名,并且您不必过滤它完全是因为你有来自其他服务器的过滤值。
答案 1 :(得分: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
}
答案 2 :(得分:0)
由于您只想替换斜杠,您可以使用它。
<?php
$user = $_GET["user"];
$user = str_replace("/", "", $user);
?>
在我之前,这是其他帖子的更高效版本:
<?php
$user = $_GET["user"];
$special = array('@', '!', '#');
$user = str_replace($special, "", $user);
?>
答案 3 :(得分:0)
您可以将以下内容替换为隐藏特殊字符
$formdesc = htmlentities($_POST['formdesc'], ENT_QUOTES, 'UTF-8');
希望这会对你有所帮助