Chr*_*ris 13 forms membership registration username
PS db是通过最佳实践PDO,因此没有sql注入的风险
谢谢
bob*_*nce 26
好吧,让我们假设您正在完成所有字符串编码任务.您没有任何SQL注入,HTML注入,或者您不应该使用URL编码的地方.所以我们不需要担心"<&%\在某些情况下是神奇的字符.而且你在使用UTF-8时所有的Unicode都在使用.还有哪些其他原因可以限制用户名?
首先,所有控制角色,为了理智.没有理由在用户名中将字符U + 0000添加到U + 001F或U + 007F到U + 009F.
接下来,拒绝或规范化意外的空格.您可能希望在用户名中允许空格,但您几乎肯定不希望允许前导空格,尾随空格或行中的多个空格.它们可能在HTML中呈现相同,但可能是一个混淆的用户错误.
如果您打算允许使用该用户名通过HTTP基本身份验证登录,则必须禁止该:字符,因为如果用户名或密码中有冒号,则基本身份验证方案会编码"用户名:密码"对而不进行转义.因此,用户名和密码中的至少一个必须排除冒号,并且最好是用户名,因为限制人们选择密码比用户名更糟糕.
对于基本身份验证,您可能还希望禁用所有非ASCII字符,因为不同的浏览器会对它们进行不同的处理.IE使用系统代码页对它们进行编码; Firefox使用ISO-8859-1对它们进行编码; Opera使用UTF-8对它们进行编码.如果HTTP Auth将可用,则在选择非ASCII名称之前至少应该警告用户,因为实际使用它们将非常不可靠.
接下来考虑其他Unicode控制序列,比如bidi覆盖和其中列出的其他字符不适合用于标记.可能你最终会将它们放入标记中,并且你不希望名字中有RLO的人向后翻转你页面中的文本.
此外,如果您允许Unicode对您获得的字符串进行规范化.否则,某人可能拥有一个带有组合o-umlaut字符的用户名ö,并想知道为什么他们无法登录Mac,默认情况下会使用单独的o字符,然后组合umlaut.通常在网络上标准化为组合形式NFC.您可能还希望使用NFKC格式进行兼容性分解; 这将允许用户Chris以全长romaji模式从日语键盘登录,输入Chris.这些是一般性问题,对于您的所有webapp输入都是很好的解决方案,但对于像用户名这样的标识符来说,获得正确性可能更为重要.
最后,确保长度可以适合数据库,而不会更改名称的静默截断,特别是如果您要存储为UTF-8字节,您不希望在字节序列中途剪切.用户名截断通常也是一个安全问题.
如果您使用用户名作为一种独特的识别方式,您还有更多需要担心的问题:已经提到的类似问题,例如?hris(使用Cyrillic Es ?).有太多这些让你合理处理; 限制为ASCII或具有识别用户的其他方法.(或者不在乎,就像SO没有;当我可以很容易地称自己为Chris时,我也没有必要给自己打电话?--Hris.)
取决于许多事情,例如,如果用户将拥有自己的URL,您要小心创建用户名"%41llan"的人不会与名为"Allan"的用户冲突,同时允许转发 - 斜线可能会导致问题.留意那些种类的限制.
| 归档时间: |
|
| 查看次数: |
3999 次 |
| 最近记录: |