情况:用户输入用户名和密码。现在用户输入名为Game_Admin的用户名。因此,试图模仿成为网站的主导力量并欺骗他人。
目前我的登录脚本检查长度特征,并查看它是否已存在。我的问题如何在我们的示例中检查玩家是否输入特定的字符分组,我试图阻止重复的分组是“管理员”。因此,如果管理员出现这个词是否是(myAdminaccount,pizzaAdmin,GreatestAdmin)。我想知道我会使用某种循环来逐个字符地搜索每个用户名,还是他们的另一种更简单的方法?
比你们所有人的建议确实有很多方法可以解决这个问题。我希望这个主题对于决定使用类型的其他人来说是一个很好的参考。我正在测试它们并权衡我的选择,但我相信我找到了最适合我的解决方案:)
答案 0 :(得分:1)
请查看stristr以获取不区分大小写的字符串匹配:
<?php
$string = 'TehAdmin';
if(stristr($string, 'admin') === FALSE) {
echo '"admin" not found in string';
} else {
echo '"admin" found in string';
}
// outputs: "admin" found in string
?>
要获得额外的娱乐,您可以使用str_ireplace
将空白字符串替换为admin的出现次数:
<?php
$string = str_ireplace("admin", "", $string);
?>
答案 1 :(得分:1)
有很多方法可以做到这一点。我会使用stripos(不区分大小写):
$findme = 'admin';
$mystring = 'This is a fake string';
$pos1 = stripos($mystring, $findme);
// Nope, 'admin' is not in $mystring
if ($pos1 === false) {
echo "The string '$findme' was not found in the string '$mystring'";
}
答案 2 :(得分:1)
我建议用户注册时,在接受表单提交之前,请在黑名单中检查用户名。如果您使用现成的软件,它可能支持此功能。
在进行表单验证时对PHP strpos()进行测试:
$badlist = Array(
'admin',
'staff',
'official'
);
foreach($badlist as $badword){
if (strpos(strtolower($_POST['username']), $badword)!==FALSE)
die('fail');
}
希望有所帮助:)
答案 3 :(得分:0)
好吧,您可以使用多个函数之一来确定一个字符串是否包含另一个字符串,stristr()和preg_match()是常用的函数。
$input = 'Game_Admin';
if ( FALSE !== stristr( $input, 'admin' ) )
{
// whatever
}
if ( preg_match( "/admin/i", $input ) )
{
// whatever
}
虽然我担心您似乎根据用户名的子字符串为用户分配了角色。这不是解决这个问题的好方法。最好在数据库中定义角色和权限。