cari
PHP和XSS跨站攻击_PHPJun 01, 2016 pm 12:29 PM
patternsearchthevalmenyerang

其实这个话题很早就想说说了,发现国内不少PHP站点都有XSS漏洞。今天偶然看到PHP5的一个XSS漏洞,在此小结一下。顺便提醒,使用PHP5的朋友最好打下补丁,或者升级一下。

如果你不懂什么是XSS,可以看这里,或者这里(中文的也许会好懂一些)。

国内不少论坛都存在跨站脚本漏洞,例如这里 有一个Google Hack XSS的攻击例子,针对的是Discuz 4.0.0RC3。国外也很多这样的例子,甚至Google也出现过,不过在12月初时修正了。跨站攻击很容易就可以构造,而且非常隐蔽,不易被查觉(通常盗取信息后马上跳转回原页面)。
如何攻击,在此不作说明(也不要问我),主要谈谈如何防范。首先,跨站脚本攻击都是由于对用户的输入没有进行严格的过滤造成的,所以我们必须在所有数据进入我们的网站和数据库之前把可能的危险拦截。针对非法的HTML代码包括单双引号等,可以使用htmlentities() 。

$str = "A 'quote' is bold";

// Outputs: A 'quote' is bold
echo htmlentities($str);

// Outputs: A 'quote' is bold
echo htmlentities($str, ENT_QUOTES);
?>


这样可以使非法的脚本失效。

但是要注意一点,htmlentities()默认编码为 ISO-8859-1,如果你的非法脚本编码为其它,那么可能无法过滤掉,同时浏览器却可以识别和执行。这个问题我先找几个站点测试后再说。

这里提供一个过滤非法脚本的函数:

function RemoveXSS($val) {
// remove all non-printable characters. CR(0a) and LF(0b) and TAB(9) are allowed
// this prevents some character re-spacing such as
// note that you have to handle splits with \n, \r, and \t later since they *are* allowed in some inputs
$val = preg_replace('/([\x00-\x08][\x0b-\x0c][\x0e-\x20])/', '', $val);

// straight replacements, the user should never need these since they're normal characters
// this prevents like PHP和XSS跨站攻击_PHP
$search = 'abcdefghijklmnopqrstuvwxyz';
$search .= 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
$search .= '1234567890!@#$%^&*()';
$search .= '~`";:? /={}[]-_|\'\\';
for ($i = 0; $i // ;? matches the ;, which is optional
// 0{0,7} matches any padded zeros, which are optional and go up to 8 chars

// @ @ search for the hex values
$val = preg_replace('/([x|X]0{0,8}'.dechex(ord($search[$i])).';?)/i', $search[$i], $val); // with a ;
// @ @ 0{0,7} matches '0' zero to seven times
$val = preg_replace('/({0,8}'.ord($search[$i]).';?)/', $search[$i], $val); // with a ;
}

// now the only remaining whitespace attacks are \t, \n, and \r
$ra1 = Array('javascript', 'vbscript', 'expression', 'applet', 'meta', 'xml', 'blink', 'link', 'style', 'script', 'embed', 'object', 'iframe', 'frame', 'frameset', 'ilayer', 'layer', 'bgsound', 'title', 'base');
$ra2 = 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');
$ra = array_merge($ra1, $ra2);

$found = true; // keep replacing as long as the previous round replaced something
while ($found == true) {
$val_before = $val;
for ($i = 0; $i $pattern = '/';
for ($j = 0; $j if ($j > 0) {
$pattern .= '(';
$pattern .= '([x|X]0{0,8}([9][a][b]);?)?';
$pattern .= '|({0,8}([9][10][13]);?)?';
$pattern .= ')?';
}
$pattern .= $ra[$i][$j];
}
$pattern .= '/i';
$replacement = substr($ra[$i], 0, 2).''.substr($ra[$i], 2); // add in to nerf the tag
$val = preg_replace($pattern, $replacement, $val); // filter out the hex tags
if ($val_before == $val) {
// no replacements were made, so exit the loop
$found = false;
}
}
}
}

Kenyataan
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Vue开发注意事项:避免常见的安全漏洞和攻击Vue开发注意事项:避免常见的安全漏洞和攻击Nov 22, 2023 am 09:44 AM

Vue是一种流行的JavaScript框架,广泛应用于Web开发中。随着Vue的使用不断增加,开发人员需要重视安全问题,以避免常见的安全漏洞和攻击。本文将讨论Vue开发中需要注意的安全事项,以帮助开发人员更好地保护他们的应用程序不受攻击。验证用户输入在Vue开发中,验证用户输入是至关重要的。用户输入是最常见的安全漏洞来源之一。在处理用户输入时,开发人员应该始

2 个月不见,人形机器人 Walker S 会叠衣服了2 个月不见,人形机器人 Walker S 会叠衣服了Apr 03, 2024 am 08:01 AM

机器之能报道编辑:吴昕国内版的人形机器人+大模型组队,首次完成叠衣服这类复杂柔性材料的操作任务。随着融合了OpenAI多模态大模型的Figure01揭开神秘面纱,国内同行的相关进展一直备受关注。就在昨天,国内"人形机器人第一股"优必选发布了人形机器人WalkerS深入融合百度文心大模型后的首个Demo,展示了一些有趣的新功能。现在,得到百度文心大模型能力加持的WalkerS是这个样子的。和Figure01一样,WalkerS没有走动,而是站在桌子后面完成一系列任务。它可以听从人类的命令,折叠衣物

Nginx防范脚本攻击的最佳方案Nginx防范脚本攻击的最佳方案Jun 10, 2023 pm 10:55 PM

Nginx防范脚本攻击的最佳方案脚本攻击是指攻击者利用脚本程序对目标网站进行攻击,以实现恶意目的的行为。脚本攻击的形式多种多样,如SQL注入、XSS攻击、CSRF攻击等等。而在Web服务器中,Nginx被广泛应用于反向代理、负载均衡、静态资源缓存等环节,在面对脚本攻击时,Nginx也可以发挥其优势,实现有效的防御。一、Nginx对脚本攻击的实现方式在Ngin

PHP中的CSRF攻击PHP中的CSRF攻击May 25, 2023 pm 08:31 PM

随着网络的不断发展,网页应用也越来越多,然而,安全问题也越来越引起人们的关注。CSRF(CrossSiteRequestForgery,即跨站请求伪造)攻击就是一种常见的网络安全问题。CSRF攻击是什么?所谓CSRF攻击,就是攻击者盗用了用户的身份,以用户的名义进行非法操作。通俗的讲,就是攻击者利用用户的登录态,在用户毫不知情的情况下,进行一些非法的操

ip地址被攻击怎么办ip地址被攻击怎么办Oct 24, 2023 pm 03:45 PM

ip地址被攻击的解决办法有分析攻击类型、设置防火墙、封堵IP地址、隔离通信链路、通知相关机构、加强安全防护、收集证据和加强安全意识培训等。详细介绍:1、分析攻击类型,首先需要分析攻击的类型和方式,了解攻击者的行为和目的;2、防火墙设置,通过配置防火墙规则,可以限制对受攻击IP的访问;3、IP封堵,如果攻击流量非常剧烈,严重影响服务器的正常运行,可以考虑暂时封堵受攻击的等等。

使用Java中的Pattern.compile方法使用Java中的Pattern.compile方法Feb 18, 2024 pm 09:04 PM

Java中Pattern.compile函数的用法Java中的Pattern.compile函数是用于编译正则表达式的方法。正则表达式是一种强大的字符串匹配和处理工具,可以用于查找、替换、验证字符串等操作。Pattern.compile函数允许我们将一个字符串模式编译成一个Pattern对象,然后可以使用该对象进行一系列字符串操作。Pattern.compi

PHP中的XSS攻击PHP中的XSS攻击May 23, 2023 am 09:10 AM

近年来,随着互联网信息技术的迅猛发展,我们的生活越来越离不开网络。而网络与我们日常生活的交互,离不开大量的代码编写、传输以及处理。而这些代码,需要我们保护它们安全,否则,恶意攻击者会利用它们发动各种攻击。其中的一种攻击就是XSS攻击。在本文中,我们将重点介绍PHP中的XSS攻击,并且给出相应的防御方法。一、XSS攻击概述XSS攻击,也称为跨站脚本攻击,通常是

Java正则表达式中的PatternSyntaxException类Java正则表达式中的PatternSyntaxException类Sep 11, 2023 pm 07:37 PM

PatternSyntaxException类表示在正则表达式字符串中出现语法错误时引发的未经检查的异常。该类包含三个主要方法,即-getDescription() -返回错误的描述。getIndex()-返回错误索引。getPattern()-返回出现错误的正则表达式模式。getMessage()-返回包含错误的完整消息、索引、出现错误的正则表达式模式、指示模式中的错误。示例 实时演示importjava.util.Scanner;importjava.util.regex.Matcher;i

See all articles

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Alat panas

DVWA

DVWA

Damn Vulnerable Web App (DVWA) ialah aplikasi web PHP/MySQL yang sangat terdedah. Matlamat utamanya adalah untuk menjadi bantuan bagi profesional keselamatan untuk menguji kemahiran dan alatan mereka dalam persekitaran undang-undang, untuk membantu pembangun web lebih memahami proses mengamankan aplikasi web, dan untuk membantu guru/pelajar mengajar/belajar dalam persekitaran bilik darjah Aplikasi web keselamatan. Matlamat DVWA adalah untuk mempraktikkan beberapa kelemahan web yang paling biasa melalui antara muka yang mudah dan mudah, dengan pelbagai tahap kesukaran. Sila ambil perhatian bahawa perisian ini

Muat turun versi mac editor Atom

Muat turun versi mac editor Atom

Editor sumber terbuka yang paling popular

Dreamweaver Mac版

Dreamweaver Mac版

Alat pembangunan web visual

PhpStorm versi Mac

PhpStorm versi Mac

Alat pembangunan bersepadu PHP profesional terkini (2018.2.1).

SecLists

SecLists

SecLists ialah rakan penguji keselamatan muktamad. Ia ialah koleksi pelbagai jenis senarai yang kerap digunakan semasa penilaian keselamatan, semuanya di satu tempat. SecLists membantu menjadikan ujian keselamatan lebih cekap dan produktif dengan menyediakan semua senarai yang mungkin diperlukan oleh penguji keselamatan dengan mudah. Jenis senarai termasuk nama pengguna, kata laluan, URL, muatan kabur, corak data sensitif, cangkerang web dan banyak lagi. Penguji hanya boleh menarik repositori ini ke mesin ujian baharu dan dia akan mempunyai akses kepada setiap jenis senarai yang dia perlukan.