• 防止特殊html字符的问题(xxs攻击)方法


    快速对字符转义,避免跨站攻击XSS

     

        XSS已经成为非常流行的网站攻击方式,为了安全起见,尽量避免用户的输入。可是有些情况下不仅不避免,反而要求鼓励输入,比如写博客。博客园开放性很高,可以运行手写的JS。之前比较著名的例子就是,凡是看到某一篇文章的,都自动关注他。

        如果避免跨站攻击的话,我们就得对用户的输入,进行转义。例如<script type='text/javascript'>alert('hello world')</script>。如果直接保存这个字符串的话,然后再输出的话,就会运行JS了。我们需要将这个字符串转义成"&lt;script type='text/javascript'&gt;alert('hello world')&lt;/script&gt;"。

        转义,就是一个个字符的匹配,然后转换。看着不难,但是需要转义的字符也不少。另外当字符数量大的时候,效率成为一个问题。下面我写一个函数,让浏览器底层帮我们做到。

     

    //将特殊字符的输入先用html编码方式进行转换,然后再进行后台提交

    function htmlEncode(html) {
    //1.首先动态创建一个容器标签元素,如DIV
    var temp = document.createElement("div");
    //2.然后将要转换的字符串设置为这个元素的innerText(ie支持)或者textContent(火狐,google支持)
    (temp.textContent != undefined) ? (temp.textContent = html) : (temp.innerText = html);
    //3.最后返回这个元素的innerHTML,即得到经过HTML编码转换的字符串了
    var output = temp.innerHTML;
    temp = null;
    return output;
    }

    function htmlDecode(text) {
    //1.首先动态创建一个容器标签元素,如DIV
    var temp = document.createElement("div");
    //2.然后将要转换的字符串设置为这个元素的innerHTML(ie,火狐,google都支持)
    temp.innerHTML = text;
    //3.最后返回这个元素的innerText(ie支持)或者textContent(火狐,google支持),即得到经过HTML解码的字符串了。
    var output = temp.innerText || temp.textContent;
    temp = null;
    return output;
    }

    实现:

    (前台保存-提交数据前先进行html编码)-html编码

    $("#Title").val(htmlEncode($("#Title").val()));
    $("#Save").click();//save为Asp服务器控件,将执行后台保存方法

    (后台保存-存入数据库前先将数据进行html解码)-html解码

    string Title= Server.HtmlDecode(this.Title.Value);

    (编辑-后台进行数据绑定)-解码

     this.Title.Value = Server.HtmlDecode(ds.Tables[0].Rows[0]["Title"].ToString());

    (查询列表,repeater绑定)

    <%#Server.HtmlEncode(Eval("title").ToString()) %>

  • 相关阅读:
    poj 1087 A Plug for UNIX
    poj 1149 : PIGS
    自己制作的我们学校的校园无线网自动登录程序(C#实现)
    poj 1067取石子(威佐夫博奕)
    poj 1088滑雪
    SQL Server 2005 系统数据介绍:sys.dm_exec_requests
    一票难求:我为铁道部献计献策!
    Integration Services 学习(7):包部署
    Integration Services 学习(8):事务
    Integration Services包部署常见问题汇总
  • 原文地址:https://www.cnblogs.com/xiatianoo/p/5482177.html
Copyright © 2020-2023  润新知