2009-08-09 7 views
1

Situation: Ein Benutzer gibt einen Benutzernamen und ein Kennwort ein. Jetzt gibt der Benutzer einen Benutzernamen namens Game_Admin ein. So versucht, eine Kopfkraft der Website nachzuahmen und andere zu betrügen.Eine Zeichenkette prüfen, um festzustellen, ob eine bestimmte Gruppierung existiert (PHP)?

Momentan überprüfen My login script nach Length Characteristics und ob es bereits existiert. Meine Frage Wie überprüfe ich, ob ein Spieler eine bestimmte Gruppierung von Charakteren in unserem Beispiel eingibt? Die Gruppierung, in der ich versuche die Duplikation zu stoppen, ist "Admin". Also, wenn das Wort Admin jemals erscheint, ist es (myAdminaccount, pizzaAdmin, GreatestAdmin). Ich wundere mich, würde ich eine Schleife irgendeiner Art verwenden, um jeden Benutzernamen Buchstabe für Buchstabe zu suchen, oder ist ihr anderer einfacher Weg?

Als Sie alle für Ihre Vorschläge Tatsächlich gibt es viele Möglichkeiten, um über diese Situation zu gehen. Ich hoffe, dass dieses Thema eine gute Referenz für andere sein kann, die sich dafür entscheiden, den Typ zu verwenden, wenn es überprüft wird. Ich bin sie alle auf die Probe stellen und meine Optionen wiegen, aber ich glaube, ich habe die Lösung gefunden, die :)

Antwort

1

Ich würde vorschlagen, wenn sich ein Benutzer anmeldet, den Benutzernamen gegen eine schwarze Liste überprüfen, bevor Formularübermittlung akzeptieren. Wenn Sie Software von der Stange verwenden, wird dies wahrscheinlich unterstützt.

-Test auf PHP strpos() wenn Formularvalidierung erfolgt:

$badlist = Array(
    'admin', 
    'staff', 
    'official' 
); 

foreach($badlist as $badword){ 
    if (strpos(strtolower($_POST['username']), $badword)!==FALSE) 
    die('fail'); 
} 

Hoffnung, das hilft :)

+0

danke für deine Hilfe AL, in der Tat scheint diese Methode genau zu dem, was ich gesucht habe. – Jesse

1

Haben Sie einen Blick auf stristr für Groß- und Kleinschreibung String-Matching für mich am besten funktioniert:

<?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 
?> 

Für zusätzliche Unterhaltung, können Sie str_ireplace verwenden Vorkommen von Admin mit dem leeren String zu ersetzen:

<?php 
$string = str_ireplace("admin", "", $string); 
?> 

http://www.php.net/manual/en/function.str-ireplace.php

+0

der str-ireplace ein komischer Gag sein könnte ich verwenden könnte, aber atm es nicht genau das, was ich Ich suche aber danke für diese tolle Methode. – Jesse

1

Es gibt viele Möglichkeiten, dies zu tun. Ich würde verwenden stripos (Groß- und Kleinschreibung):

$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'"; 
} 
+0

Ich denke, stripos() ist besser für diese Anwendung, weil er nur sieht, ob es * jemals * in einer Zeichenfolge erscheint. stristr() sucht nach jedem Vorkommen und ist daher unnötigerweise langsamer, wenn Sie dieses Verhalten nicht benötigen. – danieltalsky

0

gut, können Sie eine von mehreren Funktionen verwenden, um zu bestimmen, ob eine Zeichenkette eine andere enthält, stristr() und preg_match() sind häufig diejenigen zu verwenden.

Obwohl ich besorgt bin, dass Sie Rollen auf Benutzer basierend auf Teilstrings ihres Benutzernamens zugeordnet werden scheinen. Das ist kein guter Weg dazu. Es ist besser, Rollen und Berechtigungen in der Datenbank definiert zu haben.

+0

Sie ordnen nicht wirklich Rollen zu, sie wollen nur Leute davon abhalten, * Admins * imitieren zu wollen, um Social Engineer zu werden. – Amber

+0

ah ok, ich verstehe. Ich habe diese Nuance vermisst. –

Verwandte Themen