防XSS注入方法

雨燕双飞 提交于 2020-01-01 00:36:57

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对输入进行了白名单过滤。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!