前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >浅谈xss——跨站脚本攻击(四)

浅谈xss——跨站脚本攻击(四)

作者头像
行云博客
发布2022-05-11 14:48:25
3790
发布2022-05-11 14:48:25
举报
文章被收录于专栏:行云博客行云博客

文章目录[隐藏]

前文:

讲了这么多攻击方式,这次讲一讲防范方法

反射型xss漏洞防范

代码语言:javascript
复制
A .PHP直接输出html的,可以采用以下的方法进行过滤:

1 . htmlspecialchars函数
2 . htmlentities函数
3 .HTMLPurifier .auto .php插件
4 .RemoveXss函数

B .PHP输出到JS代码中,或者开发Json API的,则需要前端在JS中进行过滤:

1 .尽量使用innerText (IE )和textContent (Firefox ) ,也就是jQuery的text ( )来输出文本内容
2 .必须要用innerHTML等等函数,则需要做类似php的 htmlspecialchars的过滤

C .其它的通用的补充性防御手段

1 .在输出html时,加上Content Security Policy的Http Header
(作用:可以防止页面被XSS攻击时,嵌入第三方的脚本文件等)
(缺陷:IE或低版本的浏览器可能不支持)
2 .在设置Cookie时,加上HttpOnly参数
(作用:可以防止页面被XSS攻击时,Cookie信息被盗取,可兼容至IE6)
(缺陷:网站本身的JS代码也无法操作Cookie,而且作用有限,只能保证Cookie的安全)
3 .在开发API时,检验请求的Referer参数
(作用:可以在一定程度上防止CSRF攻击)
(缺陷:IE或低版本的浏览器中,Referer参数可以被伪造)

这里我们选用htmlentities()函数进行测试:

htmlentities() 函数把字符转换为 HTML 实体。

新建Xss_htmlentities.php文件,插入以下代码:

代码语言:javascript
复制
<html >
<head >
<meta http -equiv = "Content-Type" content = "text/html; charset=utf-8" />
<title >XSS </title >
</head >
<body >
<form action = "" method = "get" >
<input type = "text" name = "input" >    
<input type = "submit" >
</form >
<br >
<?php
$XssReflex = $_GET [ 'input' ] ;
echo 'output:<br>' . htmlentities ( $XssReflex ) ; #仅在这里对变量 $XssReflex 做了处理.
?>
</body >
</html >

打开页面,输入

代码语言:javascript
复制
<script>alert('xss') </script>

可以看到页面并没有弹窗。

查看网页html代码,可以看到htmlentities()函数对用户输入的<>做了转义处理,恶意代码当然也就没法执行了。

存储型xss漏洞防范

存储型XSS对用户的输入进行过滤的方式和反射型XSS相同,这里我们使用htmlspecialchars()函数进行演示:

代码语言:javascript
复制
htmlentities ( ) :把预定义的字符 "&lt;" (小于)和 "&gt;" (大于)转换为 HTML 实体
htmlspecialchars和 htmlentities的区别:
htmlspecialchars 只转义 &amp ; 、 " 、' 、&lt; 、&gt; 这几个html代码,
而 htmlentities 却会转化所有的html代码,连同里面的它无法识别的中文字符也会转化。

新建Xss_htmlspecialchars.php文件,并插入以下代码

代码语言:javascript
复制
<span style = "font-size:18px;" ><meta http -equiv = "Content-Type" content = "text/html;charset=utf-8" />  
<html >  
<head >  
<title >XssStorage </title >  
</head >  
<body >  
<h2 >Message Board <h2 >  
<br >
<form action = "Xss_htmlspecialchars.php" method = "post" >  
Message :<textarea id = 'Mid' name = "desc" ></textarea >  
<br >  
<br >  
Subuser :<input type = "text" name = "user" /><br >
<br >
<input type = "submit" value = "submit" onclick = 'loction="XssStorage.php"' />  
</form >  
<?php  
if ( isset ( $_POST [ 'user' ] ) && isset ( $_POST [ 'desc' ] ) ) {  
$log = fopen ( "sqlStorage.txt" , "a" ) ;  
fwrite ( $log , htmlspecialchars ( $_POST [ 'user' ] ) . "\r\n" ) ; # 在此对用户输入数据$_POST['user']进行过滤
fwrite ( $log , htmlspecialchars ( $_POST [ 'desc' ] ) . "\r\n" ) ; # 在此对用户输入数据$_POST['desc']进行过滤
fclose ( $log ) ;  
}  
   
if ( file_exists ( "sqlStorage.txt" ) )  
{  
$read = fopen ( "sqlStorage.txt" , 'r' ) ;  
while ( ! feof ( $read ) )  
{  
echo fgets ( $read ) . "</br>" ;  
}  
fclose ( $read ) ;  
}  
?>  
</body >  
</html >
</span >

打开页面,在Message中输入

代码语言:javascript
复制
<script>alert('xss') </script>

可以看到页面并没有弹窗。查看网页html代码,可以看到htmlspecialchars()函数对用户输入的<>做了转义处理。


行云博客 - 免责申明 本站提供的一切软件、教程和内容信息仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑或手机中彻底删除上述内容。如果您喜欢该程序,请支持正版,购买注册,得到更好的正版服务。如有侵权请邮件与我联系处理。敬请谅解!

本文链接:https://www.xy586.top/772.html

转载请注明文章来源:行云博客 » 浅谈xss——跨站脚本攻击(四)

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2000-03-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 讲了这么多攻击方式,这次讲一讲防范方法
    • 反射型xss漏洞防范
      • 这里我们选用htmlentities()函数进行测试:
        • 存储型xss漏洞防范
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档