2014-09-23 62 views
-1

我正在製作一個網站,它有一個註冊表單。在註冊表單我注意到,用戶可以在HTML像輸入:如何阻止用戶名擁有html

<div style = 'color:red;font-size:30px;'>Bob</div> 

我知道,我可以使用htmlspecialchars()但是當它被插入到數據庫中它保持的HTML的字符串中。所以我的問題是:

我可以檢測字符串中是否有任何html,然後,如果有,請他們輸入一個新的用戶名?

我正在尋找PHP或JavaScript來做到這一點。

+0

你在問如何過濾輸入。通常,另一種選擇是對輸出進行編碼(儘管它可能不適用於此)。 Jim Manico(OWASP網絡安全忍者)建議輸出編碼而不是輸入過濾。這是因爲攻擊者經常可以旁路過濾和黑名單。但攻擊者無法控制或規避應用於其輸入的輸出編碼。 – jww 2014-09-23 23:22:08

回答

11

使用strip_tags()這將刪除所有的HTML標籤

因此,如果$_POST['username'] = <div style = 'color:red;font-size:30px;'>Bob</div>strip_tags($_POST['username']) = Bob。如果您還添加trim()它也將刪除剩餘的空間。

更新

喬Frambach指出,如果你想知道如果用戶名包含HTML使用:

if (strip_tags($name) !== $name) { 
    echo 'this contains html'; 
} else { 
    echo 'this does not contain html'; 
} 

所以如果剝離值不等於它包含html的輸入值。

+1

他說*我可以檢測是否存在是字符串*中的任何html,而不是如何清理字符串 – Yang 2014-09-23 18:10:03

+4

ok,然後'if(strip_tags($ name)!== $ name){它是無效的}' – 2014-09-23 18:10:35

+0

@Joe確切地說,這就是答案。你應該發佈它 – Yang 2014-09-23 18:11:14

4

驗證字段是字母數字:

if(preg_match('/^[a-zA-Z]+[a-zA-Z0-9._]+$/', $input)){ 
    //Valid 
} 
else{ 
    //invalid 
} 
+1

如果用戶用另一種語言輸入他的名字會怎麼樣?那意味着也是無效的?這不是一個解決方案。這是有點跛腳的解決方法 – Yang 2014-09-23 18:07:50

+1

該字段是用戶名,而不是實名。 – 2014-09-23 18:08:30

+0

這些限制可以通過簡單地使用'\ w'正則表達式轉義序列_in php_來解決(JavaScript對'\ w'和'\ d'使用ASCII,而'\ s'使用ASCII) – 2014-09-23 18:13:06