我们在ASP中有一个遗留的web应用程序。Net和C#,我们得到了大约400多个由Veracode扫描引起的跨站点脚本缺陷。我创建了一个示例web应用程序并模拟了这个问题,发现每当我们直接使用任何字符串输入时,都会产生缺陷。正在执行HttpUtility。HtmlEncode(TextBox1.Text);“满足了veracode的要求,但是在所有400个地方应用这一更改是不可行的,因为届时将需要大量的工作和测试工作。我正在寻找某种方法来实现一些插件式httphandler,以便所有输入都在一个地方编码,我们不必到处更改。如果可能的话,有人能指导我吗?如果有,即使你可以指导我只要有一个方向就足够了。非常感谢。
StringOps strop = new StringOps();
string txt1, txt2;
txt1 = HttpUtility.HtmlEncode(TextBox1.Text);
txt2 = HttpUtility.HtmlEncode(TextBox2.Text);
Response.Write(strop.Add(txt1, txt2));
如果我删除了Http实用程序。HTMLEncode行Veracode对此抱怨。由于我们在很多地方都在进行此字符串操作,因此在任何地方实现此操作是不可行的。是否有可能在一个地方实现此编码,并且所有响应和请求都应该通过该管道,例如HTTPHandler和HTTPModule。
听着,我在asp.net1.0或2.0中也有一个遗留站点。我们确实将其框架更改为4.0。
所以,我的建议是改变它的框架并运行冒烟测试,然后可能会出现一些问题,然后按预期解决,然后成为处理响应等事情的主要关注点。写。由于ASP. net现在是开源的,获取这些代码并对核心功能进行最小的更改并完成您的工作,请尝试尽可能多地使用部分功能,或任何类似的东西,以便在不丢失更改的情况下进行升级。
您可以通过有条件地分配给HttpResponse的自定义HttpModule来实现这一点。过滤以拦截和处理HttpResponse。写下用法。
本例使用请求的内容类型的值。标头以确定是否应应用html编码。
public class FilterResponseWriteModule : IHttpModule, IDisposable
{
private System.IO.Stream filterStream;
public FilterResponseWriteModule()
{
}
public void Init(HttpApplication context)
{
context.BeginRequest += Context_BeginRequest;
}
private void Context_BeginRequest(object sender, EventArgs e)
{
var context = (sender as HttpApplication).Context;
if (ShouldApplyFilter(context.Request))
ApplyFilter(context.Response);
}
private bool ShouldApplyFilter(HttpRequest request)
{
return string.Equals(request.ContentType, @"text/plain", StringComparison.OrdinalIgnoreCase);
}
private void ApplyFilter(HttpResponse response)
{
filterStream = new EncodeStreamFilter(response.Filter);
response.Filter = filterStream;
}
public void Dispose()
{
if (filterStream != null)
{
filterStream.Dispose();
}
}
}
Stream是一个抽象类,因此它将生成所有相关的重写方法存根。
public class EncodeStreamFilter : Stream, IDisposable
{
private Stream _baseStream;
public EncodeStreamFilter(Stream responseFilter)
{
_baseStream = responseFilter;
}
public override void Write(byte[] buffer, int offset, int count)
{
byte[] bufferBlock = new byte[count];
Buffer.BlockCopy(buffer, offset, bufferBlock, 0, count);
var encodedBytes = Encoding.UTF8.GetBytes(HttpUtility.HtmlEncode(Encoding.UTF8.GetString(bufferBlock)));
_baseStream.Write(encodedBytes, 0, encodedBytes.Length);
}
public override bool CanRead
{
get
{
return _baseStream.CanRead;
}
}
public override bool CanSeek
{
get
{
return _baseStream.CanSeek;
}
}
public override bool CanWrite
{
get
{
return _baseStream.CanWrite;
}
}
public override long Length
{
get
{
return _baseStream.Length;
}
}
public override long Position
{
get
{
return _baseStream.Position;
}
set
{
_baseStream.Position = value;
}
}
public override void Flush()
{
_baseStream.Flush();
}
public override int Read(byte[] buffer, int offset, int count)
{
return _baseStream.Read(buffer, offset, count);
}
public override long Seek(long offset, SeekOrigin origin)
{
return _baseStream.Seek(offset, origin);
}
public override void SetLength(long value)
{
_baseStream.SetLength(value);
}
protected override void Dispose(bool disposing)
{
if (!disposing)
{
_baseStream.Dispose();
}
base.Dispose(disposing);
}
}
注意:在这种情况下,我将模块定义为应用程序App_Start文件夹中的一个类。
<system.webServer>
<modules>
<add name="FilterResponseWriteModule" type="HttpModulesTestApp.App_Start.FilterResponseWriteModule"/>
</modules>
</system.webServer>
有人能解释为什么VeraCode认为使用作为公共属性是一个坏主意,并提出一个很好的缓解意见吗? 代码(JavaScript): 攻击矢量:名称 描述: ,对name()的调用包含跨站点脚本(XSS)漏洞。该应用程序使用不受信任的输入填充HTTP响应,从而允许攻击者嵌入恶意内容(如Javascript代码),这些内容将在受害者浏览器的上下文中执行。XSS漏洞通常被用来窃取或操纵cookie、修改内容
只要应用程序获取不受信任的数据并将其发送到客户端(浏览器)而未经验证,就会发生跨站点脚本(XSS)。这允许攻击者在受害者的浏览器中执行恶意脚本,这可能导致用户会话劫持,破坏网站或将用户重定向到恶意站点。 下面我们借助一个简单图表了解这个漏洞的威胁代理,攻击向量,安全弱点,技术影响和业务影响。 威胁代理 - 内部/外部用户或管理员发送给系统的不受信任的数据。 攻击者的方法 - 发送不受信任的数据/基
类别 存储型 XSS 攻击 反射型 XSS 攻击 基于 DOM 的 XSS 攻击
问题内容: 是否可以在CSS样式表中使用跨站点脚本?例如,参考样式表包含恶意代码,您将如何处理?我知道您可以使用样式标签,但是样式表呢? 问题答案: 来自浏览器安全手册 JavaScript执行的风险。作为一个鲜为人知的功能,某些CSS实现允许将JavaScript代码嵌入样式表中。至少有三种方法可以实现此目标:使用expression(…)指令,该指令可以评估任意JavaScript语句并将其值
现在的网站包含大量的动态内容以提高用户体验,比过去要复杂得多。所谓动态内容,就是根据用户环境和需要,Web应用程序能够输出相应的内容。动态站点会受到一种名为“跨站脚本攻击”(Cross Site Scripting, 安全专家们通常将其缩写成 XSS)的威胁,而静态站点则完全不受其影响。 攻击者通常会在有漏洞的程序中插入JavaScript、VBScript、 ActiveX或Flash以欺骗用户