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).网页不停地刷新 '<meta http-equiv="refresh" content="0;">'
(2).嵌入其它网站的链接 <iframe src=http://xxxx width=250 height=250></iframe> 除了通过正常途径输入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就不说了。没企业用了吧。
PHP如何防止XSS攻击相关推荐
- 安全测试之xss攻击和mysql注入
xss概念: xss(Cross Site Script)跨站脚本攻击,为不和层叠样式表(css)混淆,写为xss 存在位置:web应用系统最常见软件安全漏洞 后果:代码植入到系统页面,篡改数据.盗取 ...
- vue 如何防止xss攻击 框架_LearningNotes-1/Vue/Vue中防止XSS脚本攻击 at master · axuu/LearningNotes-1 · GitHub...
Vue中防止XSS脚本攻击 最近写了一个博客评论模块,因为引入了表情包,所以就将原来的v-text的形式,改成了v-html,也就是渲染html标签,但是这样不可不免的会带来问题,就是XSS跨站脚本攻 ...
- 安全测试之XSS攻击
XSS (跨站脚本攻击)是什么?它的全名是:Cross-site scripting,为了和CSS层叠样式表区分所以取名XSS.是一种网站应用程序的安全漏洞攻击,是代码注入的一种.它允许恶意用户将代码 ...
- AntiXSS - 支持Html同时防止XSS攻击
跨站脚本攻击(XSS)已经不是什么新鲜的话题了,甚至很多大公司也为此吃尽苦头.最简单直接的防范方法,就是不允许任何html标签输入,对用户输入进行编码(htmlencode). 但是如果想用户输入支持 ...
- 如何php防止XSS攻击
什么是XSS:这里通俗的讲,就像是SQL注入一样,XSS攻击也可以算是对HTML和JS的一种注入.你本来希望得到是从用户那得到一段有用的文本文字,但用户提交给你的却是别有用心的可执行javascrip ...
- 使用 PHP 构建的 Web 应用如何避免 XSS 攻击
本文首先简单介绍开发测试人员如何对 Web 应用进行 XSS 漏洞测试,如何借助工具绕过客户端 JavaScript 校验输入恶意数据:然后针对使用 PHP 语言构建的 Web 站点,从在输出端对动态 ...
- 【原创】腾讯微博的XSS攻击漏洞
相信大家都知道新浪微博在6月28日发生的XSS攻击事件了吧?在那晚里,大量新浪微博用户自动发送微博信息和自动关注一名叫"hellosamy"的用户. 究竟XSS攻击为什么能有这么大 ...
- html获取cookie_知了汇智《XSS攻击-盗取cookie实战》课程文档讲解
文章来源:知了汇智冯老师 今天是<web安全-XSS攻击>系列的最后一篇啦,希望大家好好学习哦~ XSS之 知了汇智-禁卫实验室(GoDun.F) 1. 编写获取cookie的代码cook ...
- react textarea 空格为什么不换行_React 怎么实现预防XSS 攻击的
本文首发于政采云前端团队博客:浅谈 React 中的 XSS 攻击 https://www.zoo.team/article/xss-in-react 前言 前端一般会面临 XSS 这样的安全风险,但 ...
- XSS攻击之窃取Cookie
2019独角兽企业重金招聘Python工程师标准>>> 译者按: 10年前的博客似乎有点老了,但是XSS攻击的威胁依然还在,我们不得不防. 原文: XSS - Stealing Co ...
最新文章
- linux 指定库名 登录mysql_数据库学习笔记之MySQL(01)
- Project Eular 634
- vue获取当前时间和前一天时间_vue获取当前时间并实时刷新时间
- Recommendation
- TatukGIS - GisDefs - CheckFileWriteAccess 函数
- 宇瞻筹划转型 标准型内存不再是重头产品
- 步进电机、伺服电机、舵机、无刷电机、有刷电机区别
- 实现微信聊天机器人-初级篇
- 湘军团练志:罗泽南、李续宾、王錱
- 姚爱红计算机组成原理知识要点,计算机组成原理课程混合教学模式探究
- 使用Scratch2和ROS进行机器人图形化编程学习
- oracle数据库之数据的增删改以及简单的单表查询
- 关于mac上如何U盘
- WebView打开第三方APP
- 读书笔记《股票作手回忆录》
- 爱了!京东新产算法宝典在Github上爆火,成功激起了老夫的少女心!
- 斥资75元,我搭建了自己的博客网站
- STRM--用Oracle Streams wizard生成配置脚本
- 在Wireshark中按进程过滤
- 139邮箱smtp地址和端口_快速玩转UNIMIA电子邮箱,不再错过每一封邮件!
热门文章
- 第十、十一周项目-阅读程序,写出这些程序的运行结果(3)
- Android相机预览方向
- SQLite-Java-Hibernate类似hibernate的数据库辅助工具
- 阿里云rds linux平台使用wget 工具下载备份与日志文件
- L2-005. 集合相似度
- linux 和windows 下golang安装
- 利用多线程解决多业务不同定时区间歇触发问题的一种方法
- 解决html连续字符或数字换行的问题
- iOS-----程序异常处理----- 断言NSAssert()和NSParameterAssert区别和用处
- layer重复弹出(layui弹层同时存在多个)的解决方法