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 <
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 :
Enregistrer. informations de connexion automatique lorsque l'utilisateur définit la connexion automatique :
$auto=I('post.auto');//用户设置了自动登录 if(!empty($auto)){ cookie('auto',encrypt(serialize($data)));//将登录信息保存到cookie,其中$data里含有加密后的帐号,密码,和用户的IP,这里的cookie已在全局中设置过期日期为一周 }
Lorsque l'utilisateur ferme le navigateur et visite à nouveau le site Web, les informations de connexion automatique seront enregistrées. Connexion
if (!is_login()) {//是否未登录状态? $auth=cookie('auto'); if(!empty($auth)){//是否未有自动登录cookie? $data=unserialize(decrypt($auth)); if(!empty($data) && !empty($data['username']) && !empty($data['password']) && !empty($data['last_login_ip'])){ $user=M('Member')->where(array('username'=>$data['username'],'password'=>$data['password']))->find(); if(!empty($user['id'])&&($user['last_login_ip']==get_client_ip())){//cookie帐号密码是否有效?//IP来源是否相同? login_session($user['id'], $user['username'], $data['last_login_ip']);//用户自动登录成功 } } } }
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
.La dernière version de thinkphp prend déjà en charge ce paramètre
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 :
L'attribut sandbox ajouté à l'iframe peut empêcher les pages Web non fiables d'effectuer certaines opérations. Je pense que cette méthode sera largement utilisée à l'avenir.
5 : Filtrage de texte enrichi
Le filtrage de texte enrichi est le sujet le plus problématique des attaques XSS, et pas seulement est un petit site Web, et même des géants comme BAT en sont troublés chaque jour
Pour plus d'articles techniques liés à ThinkPHP, veuillez visiter . Tutoriel d'utilisation de ThinkPHP colonne pour apprendre !
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!