X-XSS-Protection头
HTTP X-XSS-Protection响应标头是 Internet Explorer, Chrome 和 Safari 的一项功能,可在检测到反射的跨站点脚本(XSS)攻击时阻止页面加载。
X-XSS-Protection: 0
X-XSS-Protection: 1
X-XSS-Protection: 1; mode=block
0:关闭浏览器的XSS防护
1:删除检测到的恶意代码, 如果响应报文中没有看到X-XSS-Protection 字段,那么浏览器就认为X-XSS-Protection配置为1。默认设置
1; mode=block:当检测到反射的XSS攻击时阻止加载页面
PHP用法:
header("X-XSS-Protection: 1; mode=block");
Apache (.htaccess)
<IfModule mod_headers.c>
Header set X-XSS-Protection "1; mode=block"
</IfModule>
ASP.net
Response.AppendHeader(X-XSS-Protection",1")
htmlspecialchars()函数
htmlspecialchars() 函数把预定义的字符转换为 HTML 实体。
& (和号)转换 &
" (双引号)转换 "
' (单引号)转换 '
< (小于)转换 <
> (大于)转换 >
语法:
htmlspecialchars(string,flags,character-set,double_encode)
我们来看第二个参数flags:
ENT_COMPAT 会转换双引号,不转换单引号。
ENT_QUOTES 既转换双引号也转换单引号。
ENT_NOQUOTES 单/双引号都不转换
默认只替换双引号。这一步导致了xss注入的绕过
<?php
$name = $_GET["name"];
$name = htmlspecialchars($name); //此处没加第二个参数产生安全问题
?>
<input type='text' value='<?php echo $name?>'>
htmlentities()函数
(PHP 4, PHP 5, PHP 7)
htmlentities — 将字符转换为 HTML 转义字符
用法和htmlspecialchars() 函数一样。
PHP中的cookie_httponly属性
cookie中设置了HttpOnly属性,程序(JS脚本、Applet等)将无法读取到Cookie信息
在php.ini配置文件中进行cookie只读设置的开启
#搜索session.cookie_httponly =
session.cookie_httponly = On
PHP代码中开启
<?php
ini_set("session.cookie_httponly", 1);
// or
session_set_cookie_params(0, NULL, NULL, NULL, TRUE);
?>
当然,仅仅靠这个属性来防止xss攻击是不够的,因为XSS攻击并不是只能获取用户COOKIE,它还可以窃取用户浏览器信息,模拟用户身份执行操作等等。
利用白名单对用户输入进行严格过滤
下面代码取自DVWA DOM中的High模式
<?php
// Is there any input?
if ( array_key_exists( "default", $_GET ) && !is_null ($_GET[ 'default' ]) ) {
# White list the allowable languages
switch ($_GET['default']) {
case "French":
case "English":
case "German":
case "Spanish":
# ok
break;
default:
header ("location: ?default=English");
exit;
}
}
?>
此处利用了switch对输入进行了白名单过滤。
来源:CSDN
作者:银音铃
链接:https://blog.csdn.net/weixin_45382656/article/details/103765012