Maison > cadre php > PensezPHP > le corps du texte

filtre thinkphp xss

步履不停
Libérer: 2019-08-16 18:11:23
original
5004 Les gens l'ont consulté

filtre thinkphp xss

Qu'est-ce que XSS : en termes simples, tout comme l'injection SQL, l'attaque XSS peut également être considérée comme une injection de HTML et de JS. À l'origine, vous espériez obtenir un morceau de texte utile de la part de l'utilisateur, mais ce que l'utilisateur vous a soumis était un javascript exécutable ou un autre script avec des arrière-pensées (la destruction de styles ou de texte de document n'est pas considérée ici comme une attaque). le contenu soumis est affiché sur la page, l'attaque XSS se produit.

Il existe une infinité de méthodes et de scénarios d'attaque sur XSS. Cet article vise simplement à vulgariser certaines connaissances de base en matière de protection de sécurité (il n'implique pas d'attaques par script flash). Je recommande un livre <>, si vous n'avez pas le temps de lire, lisez simplement cet article.

Connaissances de base à maîtriser dans cet article : cookie, principe de fonctionnement de la session, et une certaine compréhension du framework TP.

1 : Résistez à 99 % des méthodes d'attaque, applicable à 90 % des scénarios

Lorsque le site Web n'implique pas d'interactions utilisateur complexes, toutes soumises par les utilisateurs peuvent être. Le texte est traité par la fonction htmlspecialchars.

Les étapes de la version THINKPHP3.2 sont :

1 : Ajouter la configuration dans le fichier de configuration du projet : 'DEFAULT_FILTER' => ' htmlspecialchars', //Fonction de filtre par défaut

Deux : Utilisez la méthode I du cadre pour obtenir les données soumises par l'utilisateur;

Exemple : M('Membre' )->save(array('content'=>I('post.content')));Le contenu ajouté de cette manière a été traité par htmlspecialchars.

Question : Pourquoi est-il traité par htmlspecialchars La sécurité du texte peut-elle être garantie ?

Réponse : en examinant les différentes méthodes d'attaque XSS, la plupart d'entre elles s'appuient sur un ou plusieurs caractères <>'"& pour injecter du contenu. La fonction htmlspecialchars est de convertir ces caractères en entité HTML inoffensive ;

Question : Pourquoi existe-t-il une si bonne méthode, mais tant de sites Web sont encore attaqués.

Réponse : Parce que de nombreux programmeurs oublient toujours d'utiliser cette méthode de filtrage qui omet un certain élément. de données

2 : Lier le COOKIE à l'IP

Les cookies contiennent généralement des informations de connexion automatiques et un identifiant de session, même pour le contenu du cookie. Tous sont cryptés une fois le cookie. les informations sont obtenues par d'autres via des attaques XSS, cela équivaut à donner le mot de passe de votre compte à d'autres

Liez le cookie à l'IP (bien sûr, vous pouvez également obtenir plus d'autres informations sur le client). la fin peut être liée en même temps) Vous pouvez juger si ce cookie provient de l'utilisateur autorisé d'origine en fonction de l'adresse IP de l'utilisateur

Exemple d'application typique :

  1. Enregistrer. informations de connexion automatique lorsque l'utilisateur définit la connexion automatique :


  2. $auto=I(&#39;post.auto&#39;);//用户设置了自动登录
    if(!empty($auto)){
    cookie(&#39;auto&#39;,encrypt(serialize($data)));//将登录信息保存到cookie,其中$data里含有加密后的帐号,密码,和用户的IP,这里的cookie已在全局中设置过期日期为一周
    }
    Copier après la connexion
  3. Lorsque l'utilisateur ferme le navigateur et visite à nouveau le site Web, les informations de connexion automatique seront enregistrées. Connexion


  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;]);//用户自动登录成功
    }
    }
    }
    }
    Copier après la connexion

Avantages : Dans la plupart des scénarios, les cookies sont volés par XSS. les attaques peuvent être invalidées. Inconvénients : Puisque l'IP peut être partagée par plusieurs ordinateurs, la liaison ne peut pas être très précise

3 : Ajouter une configuration http uniquement pour COOKIE

.
  1. La dernière version de thinkphp prend déjà en charge ce paramètre

  2. Ce paramètre peut garantir que le cookie est uniquement transmis dans la requête http et n'est pas obtenu par. le script dans la page. Il est désormais disponible sur le marché. La plupart des navigateurs le supportent déjà.

4 : Nouvelles fonctionnalités du HTML5 à noter :