xss攻击

XSS 又叫 CSS (Cross Site Script) ,跨站脚本攻击。它指的是恶意攻击者往 Web 页面里插入恶意 html 代码,当用户浏览该页之时,嵌入其中 Web 里面的 html 代码会被执行,从而达到恶意攻击用户的特殊目的。

xss实例演示

$postData = $_POST['content'];
// 如果用户提交的内如下
adsfasdfsadfasdf<script>alter('提示')</script>这是一段内容信息

当用户访问的时候,就会显示alert的弹窗。

xss的运行原理是什么

xss主要是通过用户输入一段恶意的JavaScript代码,服务端对该脚本未做处理就进行存储。当用户访问让站,加载到该内容时,就会去执行该段脚本。

xss攻击分类

反射型XSS:<非持久化> 攻击者事先制作好攻击链接, 需要欺骗用户自己去点击链接才能触发XSS代码(服务器中没有这样的页面和内容),一般容易出现在搜索页面。

存储型XSS:<持久化> 代码是存储在服务器中的,如在个人信息或发表文章等地方,加入代码,如果没有过滤或过滤不严,那么这些代码将储存到服务器中,每当有用户访问该页面的时候都会触发代码执行,这种XSS非常危险,容易造成蠕虫,大量盗窃cookie(虽然还有种DOM型XSS,但是也还是包括在存储型XSS内)。

DOM型XSS:基于文档对象模型Document Objeet Model,DOM)的一种漏洞。DOM是一个与平台、编程语言无关的接口,它允许程序或脚本动态地访问和更新文档内容、结构和样式,处理后的结果能够成为显示页面的一部分。DOM中有很多对象,其中一些是用户可以操纵的,如uRI ,location,refelTer等。客户端的脚本程序可以通过DOM动态地检查和修改页面内容,它不依赖于提交数据到服务器端,而从客户端获得DOM中的数据在本地执行,如果DOM中的数据没有经过严格确认,就会产生DOM XSS漏洞。

参考链接

如何控制xss

1.用户输入参数过滤。

// 列举几个常见的函数。
htmlspecialchars,htmlentities,nl2br。

2.可以对一些特殊的数据做限制,例如cookie设置httponly,这样就能限制JavaScript去读取cookie。

$setResult = setcookie(
    'test3',
    '12',
    // 到期时间,而不是表示保存多长时间。
    time() + 123123123,
    // 设置有效的服务器路径,设置为"/"表示当前域名下的所有路径。
    '/',
    // 有效域名,如果需要对该域名的整个域名都有效,只需要填写一级域名就行了;
    // 如果填写的是子域名,例如www.demo.com,会对该域名以及下面的子域名城(xxx.www.demo.com)。
    'demo.com',
    // 是否仅仅通过安全的HTTPS连接传给客户端。
    // 当设置为true的情况下,如果当前的请求协议不是https,默认个情况下,服务端是不会获取到该cookie。
    // 如果当前请求协议不是https,不让客户端设置cookie,需要在服务器上做一个判断。可以使用$_SERVER['HTTPS']判断。
    true,
    // 设置为true时,只有http方式才能进行访问,而不能通过JavaScript类似的语言进行访问。
    true
);

访问该文件,生成cookie。

http://demo.com/cookie.php

这时候我们使用JavaScript的语法去获取cookie,是无法获取的。

现在将cookie改为如下的方式去执行。这里主要是将最后的httonly和secure两者配置项设置为false。

$setResult = setcookie(
    'test3',
    '12',
    // 到期时间,而不是表示保存多长时间。
    time() + 123123123,
    // 设置有效的服务器路径,设置为"/"表示当前域名下的所有路径。
    '/',
    // 有效域名,如果需要对该域名的整个域名都有效,只需要填写一级域名就行了;
    // 如果填写的是子域名,例如www.demo.com,会对该域名以及下面的子域名城(xxx.www.demo.com)。
    'demo.com',
    // 是否仅仅通过安全的HTTPS连接传给客户端。
    // 当设置为true的情况下,如果当前的请求协议不是https,默认个情况下,服务端是不会获取到该cookie。
    // 如果当前请求协议不是https,不让客户端设置cookie,需要在服务器上做一个判断。可以使用$_SERVER['HTTPS']判断。
    false,
    // 设置为true时,只有http方式才能进行访问,而不能通过JavaScript类似的语言进行访问。
    false
);

这时候我们使用JavaScript的语法去获取cookie,这时候你会发现cookie是可以获取到的了。

我来评几句
登录后评论

已发表评论数()

相关站点

热门文章