中成网站建设
    成都做网站,就选中成网站建设!专业四川网站建设,成都网站建设服务提供商
            企业宣传网站建设、电子商务网站建设、OA办公系统。联系电话:134 5869 5520

文章详情

ASP.NET的优化:黑帽seo Html注入和Nofollow

黑帽(black hat)SEO主要是指采取“不怎么道德”(暂时就这么形容吧!)的方式进行搜索引擎优化。

1. 注入攻击,包括Sql注入和Html注入。我经常能看到对Sql注入防范的谈论,但对于Html注入,很多人并没有引起足够的重视。为了展示Html注入的效果,我们模仿了一个常见的留言本功能。

首先,在页面声明中添加两个属性设置EnableEventValidation=“false” ValidateRequest=“false” ,这很关键,读者可以试一下如果不这样设置会有什么效果。

<%@ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default" EnableEventValidation="false" ValidateRequest="false" %>

然后,前台页面和后台代码段分别如下:

<asp:TextBox ID="txtInput" runat="server" Height="95px" Width="405px" TextMode="MultiLine"></asp:TextBox>
        
<asp:Button ID="btnSubmit" runat="server" Text="Simple Submit"
            onclick="btnSubmit_Click" />
        
<asp:Label ID="lblShow" runat="server"></asp:Label>

    protected void btnSubmit_Click(object sender, EventArgs e)
    {
        
this.lblShow.Text = this.txtInput.Text;
    }

程序很简单,将用户输入的内容再显示出来而已。运行代码,然后输入我们的恶意代码,提交。

<p>Sanitizing <img src=""INVALID-IMAGE" onerror>!</p>

我们会发现页面自动跳转到http://too.much.spam/页面!这就是所谓的“Html注入”。当page页面render到客户端后,浏览器会按一个普通的html页面进行解析;当解析到上面的js代码时……

为了避免这种入侵,在asp.net中,我们最简单的处理方式就是对输入的内容进行“Html编码”。将后台代码改为:

    protected void btnSubmit_Click(object sender, EventArgs e)
    {
        
this.lblShow.Text = this.Server.HtmlEncode(this.txtInput.Text);
    }

现在我们再运行代码,发现源代码被原样输出显示在页面,并没有运行。为什么呢?查看输出页面的源代码:

 

整理后,我们发现如下的映射转换:

<  --  &lt;  (less than)
>  --  &gt;  (greater than)
"  --  &quot;   (quota)

所以js无法执行,但在页面显示时,我们确能看到“原汁原味”的js内容。

但问题并没有结束,现实世界中,输入的内容除了恶意代码以外,还可能有如下的内容:

<span style=" color:blue">黑帽</span>(black hat)SEO主要是指采取<span style=" color:blue">“不怎么道德”</span>(暂时就这么形容吧!)的方式进行搜索引擎优化。

我们希望显示蓝色的文字,但经过编码后,显然无法达到我们的效果。为此,我们还需要进行更精确的过滤。这也是为什么之前我们要设置EnableEventValidation=“false” ValidateRequest=“false”的现实原因。

其实我最先想到的方案是:首先对整个内容进行编码,然后把我们允许使用的html标签再替换回来。这样是相当保险的,但是在具体的操作中,遇到了很多问题,这个郁闷啊~~~(如果有谁有这种实现的实现代码,千万要拿出来大家分享一下呀)。

我先介绍另一种方案:

首先要取出标签,如,<span style=“ color:blue”>、</span>和<script >,我们的替换范围仅局限于标签 < > 之间的内容。

然后获取所有的标签名称、属性的名称和值,如果有禁止出现的内容,就替换掉。可能的恶意代码形式如下所示:

标签的名称: <script </script

标签里的属性:<span onclick

属性的值:<img onerror=“javascript:'

 



上一篇:外刊IT评论:对象-函数式编程简史

下一篇:Asp.net如何防止图片被盗链?

友情链接

首页  |  建站学院  |  网站建设  |  成功案例  |  业务体系  |  软件定制  |  解决方案  |  联系我们  |  免责声明
中成网建公司地址:四川省成都市双楠双安东巷1号18-3-5 电话:028-6616 5255 版权所有 @ 中成网建
成都网站建设网址:www.csccd.net 邮箱:web#csccd.net
信息产业部备案号:蜀ICP备08106559号