Heim Backend-Entwicklung PHP-Tutorial Sprechen Sie darüber, wie Sie XSS-Cross-Site-Scripting-Angriffe in PHP verhindern können

Sprechen Sie darüber, wie Sie XSS-Cross-Site-Scripting-Angriffe in PHP verhindern können

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

Sprechen Sie darüber, wie Sie XSS-Cross-Site-Scripting-Angriffe in PHP verhindern können

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;
Nach dem Login kopieren
//------------------------------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--------------------------------------------//
Nach dem Login kopieren

PHP中的设置

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

----------------------------------------------------- 
 session.cookie_httponly = 
-----------------------------------------------------
Nach dem Login kopieren

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

<?php ini_set("session.cookie_httponly", 1);   
// or session_set_cookie_params(0, NULL, NULL, NULL, TRUE);   
?>
Nach dem Login kopieren

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

<?php  
setcookie("abc", "test", NULL, NULL, NULL, NULL, TRUE);   
setrawcookie("abc", "test", NULL, NULL, NULL, NULL, TRUE);  
?>
Nach dem Login kopieren

相关推荐:PHP教程

Das obige ist der detaillierte Inhalt vonSprechen Sie darüber, wie Sie XSS-Cross-Site-Scripting-Angriffe in PHP verhindern können. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
2 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Repo: Wie man Teamkollegen wiederbelebt
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Abenteuer: Wie man riesige Samen bekommt
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

So schützen Sie sich mit PHP vor Cross-Site-Scripting-Angriffen (XSS). So schützen Sie sich mit PHP vor Cross-Site-Scripting-Angriffen (XSS). Jun 29, 2023 am 10:46 AM

So nutzen Sie PHP zur Abwehr von Cross-Site-Scripting-Angriffen (XSS) Angesichts der rasanten Entwicklung des Internets sind Cross-SiteScripting-Angriffe (XSS) eine der häufigsten Bedrohungen für die Netzwerksicherheit. XSS-Angriffe dienen hauptsächlich dem Zweck, an vertrauliche Benutzerinformationen zu gelangen und Benutzerkonten zu stehlen, indem sie bösartige Skripte in Webseiten einschleusen. Um die Sicherheit der Benutzerdaten zu schützen, sollten Entwickler geeignete Maßnahmen zur Abwehr von XSS-Angriffen ergreifen. In diesem Artikel werden einige häufig verwendete PHP-Technologien zur Abwehr von XSS-Angriffen vorgestellt.

Wie funktionieren XSS-Schwachstellen? Wie funktionieren XSS-Schwachstellen? Feb 19, 2024 pm 07:31 PM

Was ist das Prinzip des XSS-Angriffs? Mit der Popularität und Entwicklung des Internets rückt die Sicherheit von Webanwendungen zunehmend in den Mittelpunkt. Unter diesen ist Cross-SiteScripting (kurz XSS) eine häufige Sicherheitslücke, auf die Webentwickler achten müssen. XSS-Angriffe werden durchgeführt, indem bösartiger Skriptcode in eine Webseite eingeschleust und im Browser des Benutzers ausgeführt wird. Dadurch kann der Angreifer den Browser des Benutzers steuern und an die vertraulichen Informationen des Benutzers gelangen.

PHP-Datenfilterung: Verhinderung von XSS- und CSRF-Angriffen PHP-Datenfilterung: Verhinderung von XSS- und CSRF-Angriffen Jul 29, 2023 pm 03:33 PM

PHP-Datenfilterung: XSS- und CSRF-Angriffe verhindern Mit der Entwicklung des Internets ist die Netzwerksicherheit zu einem Schwerpunkt geworden. Bei der Website-Entwicklung ist es sehr wichtig, vom Benutzer übermittelte Daten zu filtern und zu überprüfen, insbesondere um XSS-Angriffe (Cross-Site-Scripting-Angriffe) und CSRF-Angriffe (Cross-Site-Request-Forgery-Angriffe) zu verhindern. In diesem Artikel wird erläutert, wie Sie mit PHP diese beiden häufigen Sicherheitslücken verhindern können, und es wird ein Beispielcode als Referenz bereitgestellt. Verhindern von XSS-Angriffen XSS-Angriffe beziehen sich auf böswillige Angreifer, die bösartige Skripte oder Codes einschleusen, um sie zu manipulieren

Häufige Netzwerksicherheitsprobleme und Lösungen in der Java-Entwicklung Häufige Netzwerksicherheitsprobleme und Lösungen in der Java-Entwicklung Oct 09, 2023 pm 06:36 PM

Zusammenfassung häufiger Netzwerksicherheitsprobleme und Lösungen bei der Java-Entwicklung: Mit der Popularisierung des Internets sind Netzwerksicherheitsprobleme immer wichtiger geworden. Während der Java-Entwicklung müssen wir darüber nachdenken, wie wir die Sicherheit der Netzwerkkommunikation schützen können. In diesem Artikel werden einige häufig auftretende Netzwerksicherheitsprobleme vorgestellt und entsprechende Lösungen und Codebeispiele bereitgestellt. 1. Cross-Site-Scripting-Angriff (XSS) Beim XSS-Angriff handelt es sich um eine Angriffsmethode, die durch das Einschleusen bösartiger Skripte in Webseiten an vertrauliche Benutzerinformationen gelangt. Um XSS-Angriffe zu verhindern, können wir eine regelmäßige Eingabeprüfung nutzen

Verhinderung von Cross-Site-Scripting (XSS)-Angriffen in der Go-Sprache: Best Practices und Tipps Verhinderung von Cross-Site-Scripting (XSS)-Angriffen in der Go-Sprache: Best Practices und Tipps Jun 17, 2023 pm 12:46 PM

Mit der rasanten Entwicklung des Internets sind Website-Sicherheitsprobleme zu einem großen Problem in der Online-Welt geworden. Cross-Site-Scripting-Angriffe (XSS) sind eine häufige Sicherheitslücke, bei der Schwachstellen von Websites ausgenutzt werden, um bösartige Skripts in Webseiten einzuschleusen, um Benutzerinformationen zu stehlen und zu manipulieren. Als effiziente und sichere Programmiersprache bietet uns die Go-Sprache leistungsstarke Tools und Techniken zur Verhinderung von XSS-Angriffen. In diesem Artikel werden einige Best Practices und Techniken vorgestellt, die Go-Sprachentwicklern helfen sollen, XSS-Angriffe effektiv zu verhindern und zu beheben. für alle Eingänge

Wie vermeidet man SQL-Injection- und XSS-Angriffe bei der PHP-Sprachentwicklung? Wie vermeidet man SQL-Injection- und XSS-Angriffe bei der PHP-Sprachentwicklung? Jun 09, 2023 pm 06:27 PM

Mit zunehmender Verbreitung des Internets werden Sicherheitsprobleme immer deutlicher. Bei der PHP-Entwicklung sind SQL-Injection und XSS-Angriffe die beiden häufigsten Sicherheitsprobleme. In diesem Artikel wird erläutert, wie Sie beide Angriffe vermeiden können. 1. Was ist SQL-Injection? Unter SQL-Injection versteht man die Ausnutzung von Schwachstellen einer Webanwendung durch einen Angreifer, um durch die Eingabe von SQL-Anweisungen eine Ausführung des Datenbankservers zu bewirken, die über die ursprüngliche Entwurfsabsicht hinausgeht. Angreifer können diese Schwachstellen ausnutzen, um bösartige Operationen durchzuführen, wie etwa das Lesen und Schreiben von Daten, die Erlangung von Administratorrechten usw. 2. Wie man es vermeidet

Sicherheitsvorkehrungen kennenlernen: Verwenden Sie PHP, um XSS-Angriffe zu vermeiden Sicherheitsvorkehrungen kennenlernen: Verwenden Sie PHP, um XSS-Angriffe zu vermeiden Jun 22, 2023 am 08:48 AM

Im Zeitalter des Internets sind Injektions- und Cross-Site-Scripting-Angriffe (XSS) mit der anhaltenden Beliebtheit und Weiterentwicklung von Webanwendungen zu einem Schwerpunkt der Sicherheitspräventionsarbeit geworden. Unter anderem werden XSS-Angriffe von Angreifern durchgeführt, indem sie bösartige Skripte in Webseiten einfügen. PHP ist eine weit verbreitete serverseitige Skriptsprache in der Webentwicklung. Die Verwendung von PHP zur Vermeidung von XSS-Angriffen ist für Entwickler zu einem Muss geworden. Richtige Frage. Erstens ist es entscheidend, zu verstehen, wie XSS-Angriffe implementiert werden, um XSS-Angriffe zu verhindern. XSS

Was Sie bei der Entwicklung von ThinkPHP beachten sollten: XSS-Angriffe verhindern Was Sie bei der Entwicklung von ThinkPHP beachten sollten: XSS-Angriffe verhindern Nov 22, 2023 pm 08:13 PM

ThinkPHP ist ein beliebtes PHP-Entwicklungsframework, das leistungsstarke Funktionen und benutzerfreundliche Tools bietet und es Entwicklern ermöglicht, schnell effiziente Webanwendungen zu erstellen. Während des Entwicklungsprozesses müssen wir jedoch auf die häufige Netzwerksicherheitsbedrohung XSS (Cross-Site-Scripting-Angriff) achten. Bei einem XSS-Angriff handelt es sich um eine Technik, die bösartige Skripte einschleust, um Benutzerinformationen zu stehlen oder Malware zu verbreiten. In diesem Artikel werden einige Vorsichtsmaßnahmen besprochen, die berücksichtigt werden müssen, um XSS-Angriffe während der Entwicklung von ThinkPHP zu verhindern. Zuerst brauchen wir

See all articles