深爱不及久伴ler

导航

关于web安全的一些随记 XSS 、 Cookies

 

xss 相关问题解决过程中的一些随记

最近网站在安全检测中一直出现xss问题,查看反馈报告发现两类问题

 

1.jQuery版本过低导致

  这个可以通过升级jQuery版本来解决:本次我的是从3.x.x 升级到3.5.0以上

  但是在jQuery版本过老的情况下,不建议跨度太大的升级,否则会导致一系列的不兼容以及方法失效等问题

  这样可以采用模糊jQuery版本的方法,比如更改jQuery文件名称,并修改jQuery源文件中的版本号信息

  比如:1.2.0 可以改为 01.02.00 这样可以避免被检查到真实的jQuery版本

  注意在修改jQuery链接时,要把之前的地址从页面中删除,因为注释掉仍然会被检测到(在此问题上我头大了好久,大概是憨憨行为)

 

2.感觉像是a标签中href属性中容易被篡改插入js代码导致的问题

搜索了很多解决方案,但感觉不是很靠谱。原因是项目是一个老项目,经过很多交接过程,到我这里已经有很多问题不可预知,因此不适合改动大的处理办法。

于是在查找了一些方法后,最终还是准备尝试通过过滤href中的链接是否符合开头为 http 或 https 来尝试解决这个问题

主要方法如下:

//页面加载初始化 过滤a标签 href属性中的xss
function filterXSS_tag_a_Init() {

    console.log('init');

    let a = document.getElementsByTagName('a');

    console.log(a.length);

    for (var i = 0; i < a.length; i++) {

        filterXSS_tag_a_click(a[i]);
        a[i].setAttribute('onclick', 'filterXSS_tag_a_click(this)');
    }

}

//在a标签点击时 过滤a标签 href属性中的xss
function filterXSS_tag_a_click(obj) {

    if (obj.href.indexOf('http') != 0 && obj.href.indexOf('https') != 0) {
 
        console.log('无效的链接');
        obj.href = '#';
        obj.innerText = '#';
    }
}
View Code

js中给a标签添加onclick事件:setAttribute('onclick', 'filterXSS_tag_a_click(this)');
不选择使用jQuery的原因也是因为代码过于老,引入新的东西会有可能对之前的功能造成影响

以上两个方法 一个在页面初加载时,先对页面内所有a标签先进行一次过滤,并为所有a标签添加onclick事件

另一个在标签的onclick事件中被调用,防止中间被篡改。

其实好像可以在加载时只为a标签添加onclick,并在点击时进行过滤就ok了。

 

说明:

emmm....      第2个问题好像是由于无输入限制,也就是页面可以响应直接输入的js代码等导致,最后并不是通过上面的js代码解决的

而是通过修改webconfig文件的 validateRequest 属性解决的

具体可参考下面微软官方链接

 

3.cookie的安全问题

解决这个问题的时候尝试了很多方法 最后感觉都像在碰运气了

最后的解决办法是修改了web.config文件,涉及到的内容如下:

第一部分:(原本就有,但仍然报安全问题)

<system.web>
  <httpCookies httpOnlyCookies="true" requireSSL="true" />
</system.web>

 

第二部分:(追加了这部分之后才ok)

<system.webServer>
  <rewrite>
    <outboundRules>
        <rule name="Use only secure cookies" preCondition="Unsecured cookie">
            <match serverVariable="RESPONSE_SET_COOKIE" pattern=".*" negate="false" />
            <action type="Rewrite" value="{R:0}; secure" />
        </rule>
        <rule name="Add HttpOnly" preCondition="No HttpOnly">
            <match serverVariable="RESPONSE_Set_Cookie" pattern=".*" negate="false" />
            <action type="Rewrite" value="{R:0}; HttpOnly" />
            <conditions>
            </conditions>
        </rule>
      <preConditions>
        <preCondition name="Unsecured cookie">
          <add input="{RESPONSE_SET_COOKIE}" pattern="." />
          <add input="{RESPONSE_SET_COOKIE}" pattern="; secure" negate="true" />
        </preCondition>
        <preCondition name="No HttpOnly">
            <add input="{RESPONSE_Set_Cookie}" pattern="." />
            <add input="{RESPONSE_Set_Cookie}" pattern="; HttpOnly" negate="true" />
        </preCondition>
      </preConditions>
    </outboundRules>
  </rewrite>
</system.webServer>

 

 

----------------------------------------------------------------------------分割线------------------------------------------------------------------------------------ 

 

微软官方文档关于防止ASP.NET中的跨站点脚本攻击:

https://docs.microsoft.com/en-us/previous-versions/msp-n-p/ff649310(v=pandp.10)?redirectedfrom=MSDN

 

关于xss(留存):

https://www.cnblogs.com/digdeep/p/4679832.html

 

关于Cookies(留存):

https://wiki.owasp.org/index.php/Testing_for_cookies_attributes_(OTG-SESS-002)

https://www.itnota.com/enable-secure-httponly-cookies-iis/

 

posted on 2020-12-23 13:36  深爱不及久伴ler  阅读(142)  评论(0编辑  收藏  举报