2012-07-16 48 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'); 

希望這將有助於你