thinkphp-Filter xss

步履不停
Freigeben: 2019-08-16 18:11:23
Original
5005 Leute haben es durchsucht

thinkphp-Filter xss

Was ist XSS: Für Laien kann ein XSS-Angriff genau wie die SQL-Injection auch als eine Injektion von HTML und JS betrachtet werden. Sie hatten ursprünglich gehofft, vom Benutzer einen nützlichen Text zu erhalten, aber der Benutzer hat Ihnen ein ausführbares Javascript oder ein anderes Skript mit Hintergedanken vorgelegt (das Zerstören von Stilen oder Dokumenttext wird hier nicht als Angriff betrachtet). Werden übermittelte Inhalte auf der Seite angezeigt, erfolgt der XSS-Angriff.

Es gibt unzählige Angriffsmethoden und -szenarien zu XSS. Dieser Artikel dient nur dazu, einige grundlegende Sicherheitsschutzkenntnisse bekannt zu machen (es handelt sich nicht um Flash-Skript-Angriffe). Ich empfehle ein Buch: <>. Wenn Sie keine Zeit zum Lesen haben, lesen Sie einfach diesen Artikel.

Grundkenntnisse, die in diesem Artikel erlernt werden müssen: Cookies, Sitzungsprinzipien und ein gewisses Verständnis des TP-Frameworks.

1: Widersteht 99 % der Angriffsmethoden, anwendbar auf 90 % der Szenarien

Wenn die Website keine komplexen Benutzerinteraktionen beinhaltet, können alle von Benutzern eingereichten Aktionen ausgeführt werden Der Text wird von der Funktion htmlspecialchars verarbeitet.

Die Schritte in der THINKPHP3.2-Version sind:

1: Konfiguration in der Projektkonfigurationsdatei hinzufügen: 'DEFAULT_FILTER' => ; htmlspecialchars', // Standardfilterfunktion

Zwei: Verwenden Sie die I-Methode des Frames, um vom Benutzer übermittelte Daten zu erhalten;

Beispiel: M('Member' )->save(array('content'=>I('post.content')));Der auf diese Weise hinzugefügte Inhalt wurde von htmlspecialchars verarbeitet.

Frage: Warum wird er verarbeitet von htmlspecialchars Kann die Sicherheit von Text garantiert werden?

Antwort: Betrachtet man verschiedene XSS-Angriffsmethoden, so stützen sich die meisten auf ein oder mehrere der Zeichen <>'"&, um Inhalte einzuschleusen. Die Funktion der Funktion htmlspecialchars besteht darin, diese Zeichen in harmlose HTML-Entitäten umzuwandeln;

Frage: Warum gibt es eine so gute Methode, aber dennoch werden so viele Websites angegriffen?

Antwort: Weil viele Programmierer immer vergessen, diese Methode zu verwenden, indem sie einen bestimmten Teil auslassen von Daten

2: COOKIE an IP binden

Cookies enthalten im Allgemeinen automatische Anmeldeinformationen und Sitzungs-ID, auch für den Inhalt des Cookies. Alle werden verschlüsselt Informationen, die von anderen durch XSS-Angriffe erhalten werden, sind gleichbedeutend mit der Weitergabe Ihres Kontopassworts an andere.

Binden Sie das Cookie an die IP (natürlich können Sie auch weitere Informationen über den Benutzer erhalten). Ende kann gleichzeitig gebunden werden) Sie können anhand der IP des Benutzers beurteilen, ob dieses Cookie vom ursprünglichen autorisierten Benutzer stammt.

Typisches Anwendungsbeispiel:

  1. Speichern automatische Anmeldeinformationen, wenn der Benutzer die automatische Anmeldung einstellt:


  2. $auto=I(&#39;post.auto&#39;);//用户设置了自动登录
    if(!empty($auto)){
    cookie(&#39;auto&#39;,encrypt(serialize($data)));//将登录信息保存到cookie,其中$data里含有加密后的帐号,密码,和用户的IP,这里的cookie已在全局中设置过期日期为一周
    }
    Nach dem Login kopieren
  3. Wenn der Benutzer den Browser schließt und die Website erneut besucht, Die automatischen Anmeldeinformationen werden gespeichert. Anmelden


  4. if (!is_login()) {//是否未登录状态?
    $auth=cookie(&#39;auto&#39;);
    if(!empty($auth)){//是否未有自动登录cookie?
    $data=unserialize(decrypt($auth));
    if(!empty($data) && !empty($data[&#39;username&#39;]) && !empty($data[&#39;password&#39;]) && !empty($data[&#39;last_login_ip&#39;])){
    $user=M(&#39;Member&#39;)->where(array(&#39;username&#39;=>$data[&#39;username&#39;],&#39;password&#39;=>$data[&#39;password&#39;]))->find();
    if(!empty($user[&#39;id&#39;])&&($user[&#39;last_login_ip&#39;]==get_client_ip())){//cookie帐号密码是否有效?//IP来源是否相同?
    login_session($user[&#39;id&#39;], $user[&#39;username&#39;], $data[&#39;last_login_ip&#39;]);//用户自动登录成功
    }
    }
    }
    }
    Nach dem Login kopieren

Vorteile: In den meisten Fällen werden Cookies von XSS gestohlen Angriffe können ungültig gemacht werden. Nachteile: Da die IP möglicherweise von mehreren Computern geteilt wird, kann die Bindung nicht sehr präzise sein

Die neueste Version von thinkphp unterstützt diesen Parameter bereits

Dieser Parameter kann sicherstellen, dass das Cookie nur in der http-Anfrage übertragen und nicht abgerufen wird durch das Skript auf der Seite ist es bereits verfügbar

    4: Bemerkenswerte neue Funktionen von HTML5: