我正在编写用户注册。但是,我发现了一个限制来自示例代码的'用户名'的字符,例如'。',''',' - '被接受,没有空格或其他空白等等。
这些限制是否必要?
我正在使用MySQL + PHP。如果我采用以下几种方式:
- 将列的排序规则更改为“utf8_general_ci”;
- 将函数'mysql_escape_string'或'mysql_real_escape_string'拉入PHP;
- 创建关于用户名< - >的关系表userID('username'是客户端输入的内容,userID是INT编号。)。除了在数据库中使用“userID”外,“用户名”仅显示在HTML中。
醇>
我真的需要正则表达式吗?
感谢您的帮助。
答案 0 :(得分:1)
这些限制不是必需的,但您必须确保该用户名是有效且唯一的字符串(带或不带正则表达式)
当谈到从字符串和mysql注入中删除易受攻击的字符时,我建议使用Mysqli扩展名来准备语句,它会处理转义并且你不必逃避每个字符串手动
答案 1 :(得分:1)
由于这是一个网络应用,除了使用mysql_real_escape_string
之外,我还建议剥离或禁止任何可以构建HTML的内容。通常禁止“<”和“>”就够了。
您真的不希望某些用户输入他们的姓名:
<script src=http://malicious/script.js></script>
另一种解决方案是在向您的网页输出数据时使用htmlspecialchars
。
答案 2 :(得分:0)
这取决于你,但在我看来使用mysql_real_escape_string
应该没问题(而且我很偏执)