How to avoid XSS in this asp.net code, url : http://localhost/Tiles/ShowPage.aspx?u=javascript:alert(1234)?

问题描述 投票:0回答:1

当在浏览器中使用这个网址时,会出现一个警告。 http://localhost/Tiles/ShowPage.aspx?u=javascript:alert(1234) 我添加了“javascript:alert(1234)”部分,它是 spmething else .

客户要求避免 XSS 类攻击(如 javascript:alert(1234)) 我对此很陌生,抱歉问这个问题可能很蹩脚: 在项目中确切调用此 url 的地方,我不知道它是在 ShowPage.aspx 中还是在其他地方。 我知道我只需要使用下面的代码来避免 XSS ,但不知道在哪里使用它! HttpUtility.HtmlEncode(http://localhost/Tiles/ShowPage.aspx?u=javascript:alert(1234));

提前致谢。

asp.net .net xss
1个回答
0
投票

这是一个庞大的话题,远远超出了像 SO 这样的简单问答论坛。

您没有在该网页中显示标记(也许它是空白的并且是默认的,并且您没有任何标记 - 但即使是该信息也非常重要。

这里需要基本的 asp.net 技能。那么,你的意思是你不知道上面的内容是从哪里来的?你输入一些 js 代码,它被允许了。

更糟?你甚至懒得在这里提及你使用的是什么框架版本。

但是,鉴于您没有在此处包含一些基本信息?这告诉我你远远超出了你的技能水平。

但是,假设说 .net 4.x 框架和 Web 表单(但是,同样,我们在这里一无所知),那么我会检查 Web 配置:

<system.web>
   <httpRuntime targetFramework="4.8" requestValidationMode="4.8"/>

这应该会阻止您的示例“注入”示例代码工作,但正如我所说,脚本注入和网站安全是一条完整的职业道路,通常需要在该领域具有多年经验的人。

但是话又说回来,如前所述,这里提供了如此“微弱”的信息,更糟糕的是,您认为这里不需要如此简单的细节?

我们确实需要更多细节。

JavaScript 应该不能默认运行。现在,如果该查询 URL 参数采用该输入并将其显示在页面上(比如标记),那么 JavaScript 将运行。

在大多数情况下,asp.net 已经内置了针对此类注入的保护。

假设我们有一个简单的文本框和这样的标记:

<h3>Please enter some text</h3>
<asp:TextBox ID="TextBox1" runat="server" TextMode="MultiLine" Height="148px" Width="407px">
</asp:TextBox>
<br />
<br />
<asp:Button ID="Button1" runat="server" Text="Submit" CssClass="btn"
    OnClick="Button1_Click" />
<br />
<br />
<h3>You entered</h3>
<asp:Label ID="Label1" runat="server" Text="">
</asp:Label>

背后的代码:

Protected Sub Button1_Click(sender As Object, e As EventArgs)

    Label1.Text = TextBox1.Text

End Sub

所以,现在我们有这个:

所以,现在用户输入的问题被“显示”并注入到页面中。包括我输入的 javaScript。

所以,为了防止上述情况,请确保在页面上,我们没有这个:

<%@ Page Language="vb" AutoEventWireup="false" CodeBehind="WebForm4.aspx.vb" 
    Inherits="TestWeb.WebForm4"        
    ValidateRequest="false"        
    %>

所以,让我们从该页面中删除上面的 ValidateRequest = false。

所以,现在当我们尝试这个时,我们得到:

因此,作为一般规则,页面不应允许重新显示用户输入。因为如果我们接受用户输入,并且“只显示”用户输入的内容,那么用户可以包含标记,更糟糕的是,包含脚本代码。

现在,虽然我从页面中删除了验证请求,但您应该在整个“系统”范围内启用此“系统”,而不是在 Web 配置中按页面启用。

因此你应该在 web confige 中有这个(但是,它默认是启用的)。

例如:

<system.web>
  <httpRuntime targetFramework="4.8" requestValidationMode="4.8" />

结果,然后甚至输入say

  <b>This is bold text</b>

那会触发错误,不允许页面回传。

在您的示例中,在 url 中,直接输入了一些 JavaScript 代码,但作为一般规则,除非页面上的标记采用该 URL 参数并将原始未触及的值显示到页面中,否则该脚本不应运行用于展示。

© www.soinside.com 2019 - 2024. All rights reserved.