我正在制作一个网站,它有一个注册表单。在注册表单我注意到,用户可以在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