AntiXSS在页面使用例子

AntiXSS,由微软推出的用于防止XSS攻击的一个类库,可实现输入白名单机制和输出转义
文章最后有antixx演示工程下载
 
antixss下载地址
aspx?id=5242">http://www.microsoft.com/download/en/details.aspx?id=5242
 
msi安装程序,安装之后,安装目录下有以下文件
AntiXSS.chm   包括类库的操作手册参数说明
HtmlSanitizationLibrary.dll    包含Sanitizer类(输入白名单)
AntiXSSLibrary.dll    包含Antixss,Encoder类(输出转义)
使用时在工程内添加引用HtmlSanitizationLibrary.dll 和AntiXSSLibrary.dll
导入命名空间using Microsoft.Security.Application;
 
1、输入白名单
调用Sanitizer.GetSafeHtmlFragment方法即可,url_c未过滤后的干净字串
 
            url = Request.QueryString["url"];
            url_c = Sanitizer.GetSafeHtmlFragment(url);
            Response.Write(url_c);
2、输出转义
 
            //HTML内容编码
            html_cont = Encoder.HtmlEncode(url);
            //html_cont = url;
 
            //HTML属性编码
            input1.Value = Encoder.HtmlAttributeEncode(url);
            //input1.Value = url;
 
            //对js进行编码
            url_c = Encoder. JavaScriptEncode(url);
            //url_c = url;
 
            //URL编码
            img1.Src = Encoder.UrlEncode(url);
            //img1.Src = url;
 
 
            XmlDocument xmlDoc;
            XmlNodeList nodeList;
 
            //XML属性编码
            isbn = Encoder.XmlAttributeEncode(Request.QueryString["isbn"]);
 
            if (isbn != null)
            {
                xmlDoc = new XmlDocument();
                xmlDoc.Load(Server.MapPath("db.xml"));
                nodeList = xmlDoc.SelectSingleNode("Employees").ChildNodes;
                foreach (XmlNode xn in nodeList)
                {
                    XmlElement xe = (XmlElement)xn;
                    if (xe.GetAttribute("genre") == "张三")
                    {
                        xe.SetAttribute("ISBN", isbn);
                    }
                }
                xmlDoc.Save(Server.MapPath("db.xml"));
            }
 
            //XML内容编码
            price = Encoder.XmlEncode(Request.QueryString["price"]);
            price = Request.QueryString["price"];
            if (price != null)
            {
                xmlDoc = new XmlDocument();
                xmlDoc.Load(Server.MapPath("db.xml"));
                nodeList = xmlDoc.SelectSingleNode("Employees").ChildNodes;
                foreach (XmlNode xn in nodeList)
                {
                    XmlElement xe = (XmlElement)xn;
                    if (xe.GetAttribute("genre") == "张三")
                    {
                        XmlNodeList nls = xe.ChildNodes;
                        foreach (XmlNode xn1 in nls)
                        {
                            XmlElement xe2 = (XmlElement)xn1;
                            if (xe2.Name == "price")
                            {
                                xe2.InnerText = price;
                            }
                        }
                    }
                }
                xmlDoc.Save(Server.MapPath("db.xml"));
            }
以下为表示层
 
<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">
<form action="" id="form1" method="post">
<table border="1">
<tr>
    <td width="100">类型</td>
    <td width="300">POC clickme</td>
    <td width="500">result</td>
</tr>
<tr>
    <td>HTML内容</td>
    <td><a href="?url=%3Cscript%3Ealert(xss)%3C/script%3E" >&lt;script&gt;alert(xss)&lt;/script&gt;</a></td>
    <td><pre id="h1" runat="server" ><%=html_cont %></pre></td>
</tr>
<tr>
    <td>HTML属性</td>
    <td><a href="?url=%22%20src=%22javascript:alert(xss)%22" >&quot; src=&quot;javascript:alert(xss)&quot;</a></td>
    <td><input id="input1" runat="server"/></td>
</tr>
<tr>
    <td>js</td>
    <td><a href="?url=test;alert(1);">test;alert(1);</td>
    <td>
        <script type="text/javascript">
            var url = <%=url_c %>;
        </script>
    </td>
</tr>
<tr>
    <td>URL</td>
    <td><a href="?url=javascript:alert(xss)" >javascript:alert(xss)</a></td>
    <td><img id="img1" runat="server" alt="img1" /></td>
</tr>
<tr>
    <td>XML属性编码</td>
    <td><a href="?isbn=2-3631-4" >isbn=2-3631-4</a></td>
    <td><%=isbn %></td>
</tr>
<tr>
    <td>XML内容编码 www.2cto.com</td>
    <td><a href="?price=90" >price=90</a></td>
    <td><%=price %></td>
</tr>
</table>
</form>
</asp:Content>
好的,设计一个十佳歌手投票网站,需要考虑以下几个方面: 1. 用户管理:需要实现用户注册和登录功能,可以使用 ASP.NET Identity 进行身份验证和授权。 2. 数据库设计:需要设计数据库来存储用户信息、投票信息、歌手信息等,可以使用 SQL Server 或者 MySQL。 3. 界面设计:需要设计用户界面,包括主页、投票页面、歌手详情页面等。 4. 投票逻辑:需要实现投票逻辑,包括投票限制、投票统计、防止作弊等。 5. 安全性:需要考虑安全性问题,比如防止 SQL 注入、XSS 攻击等。 以下是一些实现思路: 1. 用户管理:使用 ASP.NET Identity 进行身份验证和授权。用户可以注册账号并登录,登录后可以投票、查看投票结果等。 2. 数据库设计:可以设计 3 个表,分别是 Users、Singers 和 Votes。Users 表存储用户信息,包括用户名、密码、邮箱等;Singers 表存储歌手信息,包括歌手姓名、照片等;Votes 表存储投票信息,包括用户 ID、歌手 ID、投票时间等。 3. 界面设计:可以设计一个主页,展示所有参选歌手的照片和姓名,点击进入歌手详情页面,展示歌手的详细信息和投票按钮。投票页面展示所有参选歌手的照片和姓名,用户可以选择投票或取消投票;投票成功后显示投票结果。可以使用 Bootstrap 或者其他 CSS 框架美化界面。 4. 投票逻辑:每个用户每天只能投一次票,可以通过在 Votes 表中增加一个日期字段来实现。为了防止作弊,可以在服务器端增加判断逻辑,比如限制同一 IP 地址只能投一次票。 5. 安全性:可以使用参数化查询来防止 SQL 注入,使用 AntiXSS 库来防止 XSS 攻击。在服务器端增加判断逻辑来防止作弊。 以上是设计十佳歌手投票网站的一些思路和实现方法,具体实现需要根据实际情况进行调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值