gpt4 book ai didi

php - preg_match 用户名验证正则表达式允许 > 和 < 尽管这些字符未列入白名单

转载 作者:行者123 更新时间:2023-12-03 23:47:22 28 4
gpt4 key购买 nike

我有这个相对简单的用户名正则表达式

// Enforce that username has to be 3-100 characters, alphanumeric, and first character a letter.
// Possibility without begin/end characters and i: [a-z][a-z0-9@.+-_]{2,100}
// Allow for simple email usernames in the future...
return !!preg_match('#^[a-zA-Z][a-zA-Z0-9@.+-_]{2,100}$#', trim($username));

不幸的是,它允许这些 XSS-ready 测试字符串:

'angle<bracket',
'angle>bracket',
'html<script>inside',

我不知道为什么,因为它们已经被正则表达式明确禁止。

这是一个正在运行的测试用例:

http://ideone.com/od7dj

有人知道为什么没有明确允许使用尖括号的正则表达式允许使用尖括号吗?我是否应该将其中一个字符 (.+-) 转义为文字?

最佳答案

+-_ 是你的问题。您需要转义字符类中的 - 或将其移动到类的末尾或开头。

例如:

/^[a-z][a-z0-9@.+_-]{2,100}\z/i

关于php - preg_match 用户名验证正则表达式允许 > 和 < 尽管这些字符未列入白名单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9996951/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com