我正在製作一個網站,它有一個註冊表單。在註冊表單我注意到,用戶可以在HTML像輸入:如何阻止用戶名擁有html
<div style = 'color:red;font-size:30px;'>Bob</div>
我知道,我可以使用htmlspecialchars()
但是當它被插入到數據庫中它保持的HTML的字符串中。所以我的問題是:
我可以檢測字符串中是否有任何html,然後,如果有,請他們輸入一個新的用戶名?
我正在尋找PHP或JavaScript來做到這一點。
我正在製作一個網站,它有一個註冊表單。在註冊表單我注意到,用戶可以在HTML像輸入:如何阻止用戶名擁有html
<div style = 'color:red;font-size:30px;'>Bob</div>
我知道,我可以使用htmlspecialchars()
但是當它被插入到數據庫中它保持的HTML的字符串中。所以我的問題是:
我可以檢測字符串中是否有任何html,然後,如果有,請他們輸入一個新的用戶名?
我正在尋找PHP或JavaScript來做到這一點。
使用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的輸入值。
驗證字段是字母數字:
if(preg_match('/^[a-zA-Z]+[a-zA-Z0-9._]+$/', $input)){
//Valid
}
else{
//invalid
}
如果用戶用另一種語言輸入他的名字會怎麼樣?那意味着也是無效的?這不是一個解決方案。這是有點跛腳的解決方法 – Yang 2014-09-23 18:07:50
該字段是用戶名,而不是實名。 – 2014-09-23 18:08:30
這些限制可以通過簡單地使用'\ w'正則表達式轉義序列_in php_來解決(JavaScript對'\ w'和'\ d'使用ASCII,而'\ s'使用ASCII) – 2014-09-23 18:13:06
你在問如何過濾輸入。通常,另一種選擇是對輸出進行編碼(儘管它可能不適用於此)。 Jim Manico(OWASP網絡安全忍者)建議輸出編碼而不是輸入過濾。這是因爲攻擊者經常可以旁路過濾和黑名單。但攻擊者無法控制或規避應用於其輸入的輸出編碼。 – jww 2014-09-23 23:22:08