谈谈PHP防止XSS跨站脚本攻击的方法
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('/([\x00-\x08,\x0b-\x0c,\x0e-\x19])/','/script/','/javascript/','/vbscript/','/expression/','/applet/' ,'/meta/','/xml/','/blink/','/link/','/style/','/embed/','/object/','/frame/','/layer/','/title/','/bgsound/' ,'/base/','/onload/','/onunload/','/onchange/','/onsubmit/','/onreset/','/onselect/','/onblur/','/onfocus/', '/onabort/','/onkeydown/','/onkeypress/','/onkeyup/','/onclick/','/ondblclick/','/onmousedown/','/onmousemove/' ,'/onmouseout/','/onmouseover/','/onmouseup/','/onunload/'); 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); //给单引号(')、双引号(")、反斜线(\)与 NUL(NULL 字符) #加上反斜线转义 } $value = preg_replace($ra,'',$value); //删除非打印字符,粗暴式过滤xss可疑字符串 $arr[$key] = htmlentities(strip_tags($value)); //去除 HTML 和 PHP 标记并转换为 HTML 实体 } else { SafeFilter($arr[$key]); } } } } ?> $str = 'www.90boke.com<meta http-equiv="refresh" content="0;">'; SafeFilter ($str); //如果你把这个注释掉,提交之后就会无休止刷新 echo $str;
//------------------------------php防注入和XSS攻击通用过滤-----Start--------------------------------------------// function string_remove_xss($html) { preg_match_all("/\<([^\<]+)\>/is", $html, $ms); $searchs[] = '<'; $replaces[] = '<'; $searchs[] = '>'; $replaces[] = '>'; if ($ms[1]) { $allowtags = 'img|a|font|div|table|tbody|caption|tr|td|th|br|p|b|strong|i|u|em|span|ol|ul|li|blockquote'; $ms[1] = array_unique($ms[1]); foreach ($ms[1] as $value) { $searchs[] = "<".$value.">"; $value = str_replace('&', '_uch_tmp_str_', $value); $value = string_htmlspecialchars($value); $value = str_replace('_uch_tmp_str_', '&', $value); $value = str_replace(array('\\', '/*'), array('.', '/.'), $value); $skipkeys = array('onabort','onactivate','onafterprint','onafterupdate','onbeforeactivate','onbeforecopy','onbeforecut','onbeforedeactivate', 'onbeforeeditfocus','onbeforepaste','onbeforeprint','onbeforeunload','onbeforeupdate','onblur','onbounce','oncellchange','onchange', 'onclick','oncontextmenu','oncontrolselect','oncopy','oncut','ondataavailable','ondatasetchanged','ondatasetcomplete','ondblclick', 'ondeactivate','ondrag','ondragend','ondragenter','ondragleave','ondragover','ondragstart','ondrop','onerror','onerrorupdate', 'onfilterchange','onfinish','onfocus','onfocusin','onfocusout','onhelp','onkeydown','onkeypress','onkeyup','onlayoutcomplete', 'onload','onlosecapture','onmousedown','onmouseenter','onmouseleave','onmousemove','onmouseout','onmouseover','onmouseup','onmousewheel', 'onmove','onmoveend','onmovestart','onpaste','onpropertychange','onreadystatechange','onreset','onresize','onresizeend','onresizestart', 'onrowenter','onrowexit','onrowsdelete','onrowsinserted','onscroll','onselect','onselectionchange','onselectstart','onstart','onstop', 'onsubmit','onunload','javascript','script','eval','behaviour','expression','style','class'); $skipstr = implode('|', $skipkeys); $value = preg_replace(array("/($skipstr)/i"), '.', $value); if (!preg_match("/^[\/|\s]?($allowtags)(\s+|$)/is", $value)) { $value = ''; } $replaces[] = empty($value) ? '' : "<" . str_replace('"', '"', $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('&', '"', '<', '>'), array('&', '"', '<', '>'), $string); if (strpos($string, '&#') !== false) { $string = preg_replace('/&((#(\d{3,5}|x[a-fA-F0-9]{4}));)/', '&\\1', $string); } } else { if (PHP_VERSION < '5.4.0') { $string = htmlspecialchars($string, $flags); } else { if (!defined('CHARSET') || (strtolower(CHARSET) == 'utf-8')) { $charset = 'UTF-8'; } else { $charset = 'ISO-8859-1'; } $string = htmlspecialchars($string, $flags, $charset); } } } return $string; } //------------------php防注入和XSS攻击通用过滤-----End--------------------------------------------//
PHP中的设置
PHP5.2以上版本已支持HttpOnly参数的设置,同样也支持全局的HttpOnly的设置,在php.ini中
----------------------------------------------------- session.cookie_httponly = -----------------------------------------------------
设置其值为1或者TRUE,来开启全局的Cookie的HttpOnly属性,当然也支持在代码中来开启:
<?php ini_set("session.cookie_httponly", 1); // or session_set_cookie_params(0, NULL, NULL, NULL, TRUE); ?>
Cookie操作函数setcookie函数和setrawcookie函数也专门添加了第7个参数来做为HttpOnly的选项,开启方法为:
<?php setcookie("abc", "test", NULL, NULL, NULL, NULL, TRUE); setrawcookie("abc", "test", NULL, NULL, NULL, NULL, TRUE); ?>
相关推荐:PHP教程
Atas ialah kandungan terperinci 谈谈PHP防止XSS跨站脚本攻击的方法. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



Cara Menggunakan PHP untuk Mempertahankan Serangan Cross-Site Scripting (XSS) Dengan perkembangan pesat Internet, serangan Cross-SiteScripting (XSS) adalah salah satu ancaman keselamatan rangkaian yang paling biasa. Serangan XSS terutamanya mencapai tujuan mendapatkan maklumat sensitif pengguna dan mencuri akaun pengguna dengan menyuntik skrip berniat jahat ke dalam halaman web. Untuk melindungi keselamatan data pengguna, pembangun harus mengambil langkah yang sesuai untuk mempertahankan diri daripada serangan XSS. Artikel ini akan memperkenalkan beberapa teknik PHP yang biasa digunakan untuk mempertahankan diri daripada serangan XSS

Apakah prinsip serangan XSS? Contoh kod khusus diperlukan Dengan populariti dan perkembangan Internet, keselamatan aplikasi Web secara beransur-ansur menjadi tumpuan perhatian. Antaranya, Cross-SiteScripting (pendek kata XSS) ialah kelemahan keselamatan biasa yang mesti diberi perhatian oleh pembangun web. Serangan XSS dilakukan dengan menyuntik kod skrip berniat jahat ke dalam halaman Web dan melaksanakannya dalam penyemak imbas pengguna Ini membolehkan penyerang mengawal pelayar pengguna dan mendapatkan maklumat sensitif pengguna.

Penapisan Data PHP: Mencegah Serangan XSS dan CSRF Dengan perkembangan Internet, keselamatan rangkaian telah menjadi salah satu tumpuan perhatian orang ramai. Dalam pembangunan laman web, adalah sangat penting untuk menapis dan mengesahkan data yang diserahkan pengguna, terutamanya untuk mencegah serangan XSS (serangan skrip silang tapak) dan CSRF (serangan pemalsuan permintaan silang tapak). Artikel ini akan memperkenalkan cara menggunakan PHP untuk menghalang kedua-dua kelemahan keselamatan biasa ini dan menyediakan beberapa kod sampel untuk rujukan. Mencegah serangan XSS Serangan XSS merujuk kepada penyerang berniat jahat yang menyuntik skrip atau kod berniat jahat untuk diusik

Dengan perkembangan pesat Internet, isu keselamatan laman web telah menjadi masalah utama dalam dunia dalam talian. Serangan skrip silang tapak (XSS) ialah kelemahan keselamatan biasa yang mengeksploitasi kelemahan tapak web untuk menyuntik skrip berniat jahat ke dalam halaman web untuk mencuri dan mengganggu maklumat pengguna. Sebagai bahasa pengaturcaraan yang cekap dan selamat, bahasa Go memberikan kami alat dan teknik yang berkuasa untuk mencegah serangan XSS. Artikel ini akan memperkenalkan beberapa amalan dan teknik terbaik untuk membantu pembangun bahasa Go mencegah dan menyelesaikan serangan XSS dengan berkesan. untuk semua input

Dalam era Internet, dengan populariti berterusan dan pembangunan aplikasi Web, suntikan dan serangan skrip silang tapak (XSS) telah menjadi tumpuan kerja pencegahan keselamatan. Antaranya, serangan XSS dilakukan oleh penyerang dengan memasukkan skrip berniat jahat ke dalam halaman Web, sebagai bahasa skrip bahagian pelayan, digunakan secara meluas dalam pembangunan Web Cara menggunakan PHP untuk mengelakkan serangan XSS telah menjadi satu kemestian bagi pembangun. Soalan betul. Pertama, memahami cara serangan XSS dilaksanakan adalah penting untuk mencegah serangan XSS. XSS

Apabila Internet semakin digunakan secara meluas, isu keselamatan menjadi semakin ketara. Dalam pembangunan PHP, suntikan SQL dan serangan XSS adalah dua isu keselamatan yang paling biasa. Artikel ini menerangkan cara untuk mengelakkan kedua-dua serangan. 1. Apakah suntikan SQL? Suntikan SQL merujuk kepada penyerang yang mengeksploitasi kelemahan aplikasi web untuk menyebabkan pelayan pangkalan data berjalan dengan cara yang melebihi niat reka bentuk asal dengan memasukkan arahan SQL. Penyerang boleh menggunakan kelemahan ini untuk melakukan operasi berniat jahat, seperti membaca dan menulis data, mendapatkan keistimewaan pentadbir, dsb. 2. Cara mengelak

Ringkasan isu dan penyelesaian keselamatan rangkaian biasa dalam pembangunan Java: Dengan popularisasi Internet, isu keselamatan rangkaian telah menjadi semakin menonjol. Semasa pembangunan Java, kita perlu mempertimbangkan cara melindungi keselamatan komunikasi rangkaian. Artikel ini akan memperkenalkan beberapa masalah keselamatan rangkaian biasa dan menyediakan penyelesaian yang sepadan serta contoh kod. 1. Serangan skrip silang tapak (XSS) Serangan XSS merujuk kepada kaedah serangan yang mendapatkan maklumat sensitif pengguna dengan menyuntik skrip berniat jahat ke dalam halaman web. Untuk mengelakkan serangan XSS, kami boleh menggunakan semakan input biasa

Dengan pembangunan berterusan teknologi Web, isu keselamatan telah menjadi semakin penting, antaranya serangan XSS adalah sangat biasa. Penyerang menyuntik kod ke dalam tapak web supaya pengguna akan diserang semasa menyemak imbas tapak web, sekali gus membocorkan privasi peribadi atau menjalankan penipuan pancingan data. Oleh itu, dalam pembangunan web moden, mencegah serangan XSS telah menjadi keperluan asas. Untuk mengelakkan serangan XSS, kita perlu menulis beberapa dasar untuk membimbing kerja pelayan Nginx. Strategi ini boleh termasuk semakan input, semakan output, C
