Maison développement back-end tutoriel php Expliquer comment empêcher les attaques de scripts intersites XSS en PHP

Expliquer comment empêcher les attaques de scripts intersites XSS en PHP

Jul 17, 2020 pm 03:41 PM
xss攻击

Expliquer comment empêcher les attaques de scripts intersites XSS en PHP

PHP防止XSS跨站脚本攻击的方法:是针对非法的HTML代码包括单双引号等,使用htmlspecialchars()函数

在使用htmlspecialchars()函数的时候注意第二个参数, 直接用htmlspecialchars($string) 的话,第二个参数默认是ENT_COMPAT,函数默认只是转化双引号(“), 不对单引号(‘)做转义.

所以,htmlspecialchars函数更多的时候要加上第二个参数, 应该这样用: htmlspecialchars($string,ENT_QUOTES).当然,如果需要不转化任何引号,用htmlspecialchars($string,ENT_NOQUOTES).

另外, 尽量少用htmlentities, 在全部英文的时候htmlentities和htmlspecialchars没有区别,都可以达到目的.但是,中文情况下, htmlentities却会转化所有的html代码,连同里面的它无法识别的中文字符也给转化了。

htmlentities和htmlspecialchars这两个函数对 '之类的字符串支持不好,都不能转化, 所以用htmlentities和htmlspecialchars转化的字符串只能防止XSS攻击,不能防止SQL注入攻击.

所有有打印的语句如echo,print等 在打印前都要使用htmlentities() 进行过滤,这样可以防止Xss,注意中文要写出htmlentities($name,ENT_NOQUOTES,GB2312) 。

  (1).网页不停地刷新 ''

  (2).嵌入其它网站的链接  除了通过正常途径输入XSS攻击字符外,还可以绕过JavaScript校验,通过修改请求达到XSS攻击的目的.

<?php
//php防注入和XSS攻击通用过滤
$_GET     && SafeFilter($_GET);
$_POST    && SafeFilter($_POST);
$_COOKIE  && SafeFilter($_COOKIE);
  
function SafeFilter (&$arr) 
{
   $ra=Array(&#39;/([\x00-\x08,\x0b-\x0c,\x0e-\x19])/&#39;,&#39;/script/&#39;,&#39;/javascript/&#39;,&#39;/vbscript/&#39;,&#39;/expression/&#39;,&#39;/applet/&#39;
   ,&#39;/meta/&#39;,&#39;/xml/&#39;,&#39;/blink/&#39;,&#39;/link/&#39;,&#39;/style/&#39;,&#39;/embed/&#39;,&#39;/object/&#39;,&#39;/frame/&#39;,&#39;/layer/&#39;,&#39;/title/&#39;,&#39;/bgsound/&#39;
   ,&#39;/base/&#39;,&#39;/onload/&#39;,&#39;/onunload/&#39;,&#39;/onchange/&#39;,&#39;/onsubmit/&#39;,&#39;/onreset/&#39;,&#39;/onselect/&#39;,&#39;/onblur/&#39;,&#39;/onfocus/&#39;,
   &#39;/onabort/&#39;,&#39;/onkeydown/&#39;,&#39;/onkeypress/&#39;,&#39;/onkeyup/&#39;,&#39;/onclick/&#39;,&#39;/ondblclick/&#39;,&#39;/onmousedown/&#39;,&#39;/onmousemove/&#39;
   ,&#39;/onmouseout/&#39;,&#39;/onmouseover/&#39;,&#39;/onmouseup/&#39;,&#39;/onunload/&#39;);
     
   if (is_array($arr))
   {
     foreach ($arr as $key => $value) 
     {
        if (!is_array($value))
        {
          if (!get_magic_quotes_gpc())  //不对magic_quotes_gpc转义过的字符使用addslashes(),避免双重转义。
          {
             $value  = addslashes($value); //给单引号(&#39;)、双引号(")、反斜线(\)与 NUL(NULL 字符)
             #加上反斜线转义
          }
          $value       = preg_replace($ra,&#39;&#39;,$value);     //删除非打印字符,粗暴式过滤xss可疑字符串
          $arr[$key]     = htmlentities(strip_tags($value)); //去除 HTML 和 PHP 标记并转换为 HTML 实体
        }
        else
        {
          SafeFilter($arr[$key]);
        }
     }
   }
}
?>
$str = &#39;www.90boke.com<meta http-equiv="refresh" content="0;">&#39;;
SafeFilter ($str); //如果你把这个注释掉,提交之后就会无休止刷新
echo $str;
Copier après la connexion
//------------------------------php防注入和XSS攻击通用过滤-----Start--------------------------------------------//
function string_remove_xss($html) {
    preg_match_all("/\<([^\<]+)\>/is", $html, $ms);
 
    $searchs[] = &#39;<&#39;;
    $replaces[] = &#39;<&#39;;
    $searchs[] = &#39;>&#39;;
    $replaces[] = &#39;>&#39;;
 
    if ($ms[1]) {
        $allowtags = &#39;img|a|font|div|table|tbody|caption|tr|td|th|br|p|b|strong|i|u|em|span|ol|ul|li|blockquote&#39;;
        $ms[1] = array_unique($ms[1]);
        foreach ($ms[1] as $value) {
            $searchs[] = "<".$value.">";
 
            $value = str_replace(&#39;&&#39;, &#39;_uch_tmp_str_&#39;, $value);
            $value = string_htmlspecialchars($value);
            $value = str_replace(&#39;_uch_tmp_str_&#39;, &#39;&&#39;, $value);
 
            $value = str_replace(array(&#39;\\&#39;, &#39;/*&#39;), array(&#39;.&#39;, &#39;/.&#39;), $value);
            $skipkeys = array(&#39;onabort&#39;,&#39;onactivate&#39;,&#39;onafterprint&#39;,&#39;onafterupdate&#39;,&#39;onbeforeactivate&#39;,&#39;onbeforecopy&#39;,&#39;onbeforecut&#39;,&#39;onbeforedeactivate&#39;,
                    &#39;onbeforeeditfocus&#39;,&#39;onbeforepaste&#39;,&#39;onbeforeprint&#39;,&#39;onbeforeunload&#39;,&#39;onbeforeupdate&#39;,&#39;onblur&#39;,&#39;onbounce&#39;,&#39;oncellchange&#39;,&#39;onchange&#39;,
                    &#39;onclick&#39;,&#39;oncontextmenu&#39;,&#39;oncontrolselect&#39;,&#39;oncopy&#39;,&#39;oncut&#39;,&#39;ondataavailable&#39;,&#39;ondatasetchanged&#39;,&#39;ondatasetcomplete&#39;,&#39;ondblclick&#39;,
                    &#39;ondeactivate&#39;,&#39;ondrag&#39;,&#39;ondragend&#39;,&#39;ondragenter&#39;,&#39;ondragleave&#39;,&#39;ondragover&#39;,&#39;ondragstart&#39;,&#39;ondrop&#39;,&#39;onerror&#39;,&#39;onerrorupdate&#39;,
                    &#39;onfilterchange&#39;,&#39;onfinish&#39;,&#39;onfocus&#39;,&#39;onfocusin&#39;,&#39;onfocusout&#39;,&#39;onhelp&#39;,&#39;onkeydown&#39;,&#39;onkeypress&#39;,&#39;onkeyup&#39;,&#39;onlayoutcomplete&#39;,
                    &#39;onload&#39;,&#39;onlosecapture&#39;,&#39;onmousedown&#39;,&#39;onmouseenter&#39;,&#39;onmouseleave&#39;,&#39;onmousemove&#39;,&#39;onmouseout&#39;,&#39;onmouseover&#39;,&#39;onmouseup&#39;,&#39;onmousewheel&#39;,
                    &#39;onmove&#39;,&#39;onmoveend&#39;,&#39;onmovestart&#39;,&#39;onpaste&#39;,&#39;onpropertychange&#39;,&#39;onreadystatechange&#39;,&#39;onreset&#39;,&#39;onresize&#39;,&#39;onresizeend&#39;,&#39;onresizestart&#39;,
                    &#39;onrowenter&#39;,&#39;onrowexit&#39;,&#39;onrowsdelete&#39;,&#39;onrowsinserted&#39;,&#39;onscroll&#39;,&#39;onselect&#39;,&#39;onselectionchange&#39;,&#39;onselectstart&#39;,&#39;onstart&#39;,&#39;onstop&#39;,
                    &#39;onsubmit&#39;,&#39;onunload&#39;,&#39;javascript&#39;,&#39;script&#39;,&#39;eval&#39;,&#39;behaviour&#39;,&#39;expression&#39;,&#39;style&#39;,&#39;class&#39;);
            $skipstr = implode(&#39;|&#39;, $skipkeys);
            $value = preg_replace(array("/($skipstr)/i"), &#39;.&#39;, $value);
            if (!preg_match("/^[\/|\s]?($allowtags)(\s+|$)/is", $value)) {
                $value = &#39;&#39;;
            }
            $replaces[] = empty($value) ? &#39;&#39; : "<" . str_replace(&#39;"&#39;, &#39;"&#39;, $value) . ">";
        }
    }
    $html = str_replace($searchs, $replaces, $html);
 
    return $html;
}
//php防注入和XSS攻击通用过滤 
function string_htmlspecialchars($string, $flags = null) {
    if (is_array($string)) {
        foreach ($string as $key => $val) {
            $string[$key] = string_htmlspecialchars($val, $flags);
        }
    } else {
        if ($flags === null) {
            $string = str_replace(array(&#39;&&#39;, &#39;"&#39;, &#39;<&#39;, &#39;>&#39;), array(&#39;&&#39;, &#39;"&#39;, &#39;<&#39;, &#39;>&#39;), $string);
            if (strpos($string, &#39;&#&#39;) !== false) {
                $string = preg_replace(&#39;/&((#(\d{3,5}|x[a-fA-F0-9]{4}));)/&#39;, &#39;&\\1&#39;, $string);
            }
        } else {
            if (PHP_VERSION < &#39;5.4.0&#39;) {
                $string = htmlspecialchars($string, $flags);
            } else {
                if (!defined(&#39;CHARSET&#39;) || (strtolower(CHARSET) == &#39;utf-8&#39;)) {
                    $charset = &#39;UTF-8&#39;;
                } else {
                    $charset = &#39;ISO-8859-1&#39;;
                }
                $string = htmlspecialchars($string, $flags, $charset);
            }
        }
    }
 
    return $string;
}

//------------------php防注入和XSS攻击通用过滤-----End--------------------------------------------//
Copier après la connexion

PHP中的设置

PHP5.2以上版本已支持HttpOnly参数的设置,同样也支持全局的HttpOnly的设置,在php.ini中

----------------------------------------------------- 
 session.cookie_httponly = 
-----------------------------------------------------
Copier après la connexion

设置其值为1或者TRUE,来开启全局的Cookie的HttpOnly属性,当然也支持在代码中来开启:

<?php ini_set("session.cookie_httponly", 1);   
// or session_set_cookie_params(0, NULL, NULL, NULL, TRUE);   
?>
Copier après la connexion

Cookie操作函数setcookie函数和setrawcookie函数也专门添加了第7个参数来做为HttpOnly的选项,开启方法为:

<?php  
setcookie("abc", "test", NULL, NULL, NULL, NULL, TRUE);   
setrawcookie("abc", "test", NULL, NULL, NULL, NULL, TRUE);  
?>
Copier après la connexion

相关推荐:PHP教程

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!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment se protéger contre les attaques de cross-site scripting (XSS) à l'aide de PHP Comment se protéger contre les attaques de cross-site scripting (XSS) à l'aide de PHP Jun 29, 2023 am 10:46 AM

Comment utiliser PHP pour défendre les attaques Cross-Site Scripting (XSS) Avec le développement rapide d'Internet, les attaques Cross-SiteScripting (XSS) sont l'une des menaces de sécurité réseau les plus courantes. Les attaques XSS visent principalement à obtenir des informations sensibles sur les utilisateurs et à voler des comptes d'utilisateurs en injectant des scripts malveillants dans des pages Web. Pour protéger la sécurité des données des utilisateurs, les développeurs doivent prendre les mesures appropriées pour se défendre contre les attaques XSS. Cet article présentera quelques techniques PHP couramment utilisées pour se défendre contre les attaques XSS.

Comment fonctionnent les vulnérabilités XSS ? Comment fonctionnent les vulnérabilités XSS ? Feb 19, 2024 pm 07:31 PM

Quel est le principe de l'attaque XSS ? Des exemples de codes spécifiques sont nécessaires Avec la popularité et le développement d'Internet, la sécurité des applications Web est progressivement devenue le centre d'attention. Parmi eux, Cross-SiteScripting (XSS en abrégé) est une vulnérabilité de sécurité courante à laquelle les développeurs Web doivent prêter attention. Les attaques XSS sont effectuées en injectant du code de script malveillant dans une page Web et en l'exécutant dans le navigateur de l'utilisateur. Cela permet à l'attaquant de contrôler le navigateur de l'utilisateur et d'obtenir les informations sensibles de l'utilisateur.

Filtrage des données PHP : prévenir les attaques XSS et CSRF Filtrage des données PHP : prévenir les attaques XSS et CSRF Jul 29, 2023 pm 03:33 PM

Filtrage des données PHP : prévention des attaques XSS et CSRF Avec le développement d'Internet, la sécurité des réseaux est devenue l'un des centres d'attention des gens. Lors du développement de sites Web, il est très important de filtrer et de vérifier les données soumises par les utilisateurs, en particulier pour prévenir les attaques XSS (cross-site scripting attaques) et CSRF (cross-site request forgery attaques). Cet article explique comment utiliser PHP pour éviter ces deux vulnérabilités de sécurité courantes et fournit un exemple de code pour référence. Prévention des attaques XSS Les attaques XSS font référence à des attaquants malveillants qui injectent des scripts ou des codes malveillants pour les falsifier.

Prévention des attaques par cross-site scripting (XSS) dans Go : bonnes pratiques et conseils Prévention des attaques par cross-site scripting (XSS) dans Go : bonnes pratiques et conseils Jun 17, 2023 pm 12:46 PM

Avec le développement rapide d’Internet, les problèmes de sécurité des sites Web sont devenus un problème majeur dans le monde en ligne. L'attaque de script intersite (XSS) est une vulnérabilité de sécurité courante qui exploite les faiblesses des sites Web pour injecter des scripts malveillants dans les pages Web afin de voler et de falsifier les informations des utilisateurs. En tant que langage de programmation efficace et sûr, le langage Go nous fournit des outils et techniques puissants pour prévenir les attaques XSS. Cet article présentera quelques bonnes pratiques et techniques pour aider les développeurs du langage Go à prévenir et à résoudre efficacement les attaques XSS. pour toutes les entrées

Apprenez les précautions de sécurité : utilisez PHP pour éviter les attaques XSS Apprenez les précautions de sécurité : utilisez PHP pour éviter les attaques XSS Jun 22, 2023 am 08:48 AM

À l'ère d'Internet, avec la popularité et le développement continus des applications Web, les attaques par injection et par script intersite (XSS) sont devenues au centre du travail de prévention en matière de sécurité. Parmi elles, les attaques XSS sont menées par des attaquants en insérant des scripts malveillants dans les pages Web. PHP, en tant que langage de script côté serveur, est largement utilisé dans le développement Web. Comment utiliser PHP pour éviter les attaques XSS est devenu un incontournable pour les développeurs. Bonne question. Premièrement, comprendre comment les attaques XSS sont mises en œuvre est crucial pour prévenir les attaques XSS. XSS

Problèmes courants de sécurité réseau et solutions dans le développement Java Problèmes courants de sécurité réseau et solutions dans le développement Java Oct 09, 2023 pm 06:36 PM

Résumé des problèmes courants de sécurité réseau et des solutions dans le développement Java : Avec la popularisation d'Internet, les problèmes de sécurité réseau sont devenus de plus en plus importants. Lors du développement Java, nous devons réfléchir à la manière de protéger la sécurité des communications réseau. Cet article présentera certains problèmes courants de sécurité réseau et fournira les solutions correspondantes et des exemples de code. 1. Attaque de script intersite (XSS) L'attaque XSS fait référence à une méthode d'attaque qui obtient des informations sensibles sur l'utilisateur en injectant des scripts malveillants dans des pages Web. Pour éviter les attaques XSS, nous pouvons utiliser une vérification régulière des entrées

Comment éviter les injections SQL et les attaques XSS dans le développement du langage PHP ? Comment éviter les injections SQL et les attaques XSS dans le développement du langage PHP ? Jun 09, 2023 pm 06:27 PM

À mesure qu’Internet est de plus en plus utilisé, les problèmes de sécurité deviennent de plus en plus visibles. Dans le développement PHP, l'injection SQL et les attaques XSS sont les deux problèmes de sécurité les plus courants. Cet article explique comment éviter les deux attaques. 1. Qu'est-ce que l'injection SQL ? L'injection SQL fait référence à un attaquant exploitant les vulnérabilités d'une application Web pour faire fonctionner le serveur de base de données d'une manière au-delà de l'intention de conception initiale en saisissant des instructions SQL. Les attaquants peuvent utiliser ces vulnérabilités pour effectuer des opérations malveillantes, telles que lire et écrire des données, obtenir des privilèges d'administrateur, etc. 2. Comment éviter

Pratique de rédaction de politiques Nginx : prévenir les attaques XSS Pratique de rédaction de politiques Nginx : prévenir les attaques XSS Jun 09, 2023 pm 09:55 PM

Avec le développement continu de la technologie Web, les problèmes de sécurité sont devenus de plus en plus importants, parmi lesquels les attaques XSS sont extrêmement courantes. Les attaquants injectent du code dans le site Web afin que les utilisateurs soient attaqués lors de leur navigation sur le site Web, divulguant ainsi leur vie privée ou menant des escroqueries par phishing. Par conséquent, dans le développement Web moderne, la prévention des attaques XSS est devenue une exigence fondamentale. Afin de prévenir les attaques XSS, nous devons rédiger certaines politiques pour guider le travail du serveur Nginx. Ces stratégies peuvent inclure la vérification des entrées, la vérification des sorties, C

See all articles