XSS(跨站脚本漏洞)谁帮忙修复下,我看着就头大,一窍不通啊。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了XSS(跨站脚本漏洞)谁帮忙修复下,我看着就头大,一窍不通啊。相关的知识,希望对你有一定的参考价值。
No.1017361 XSS(跨站脚本漏洞)
缺陷属性
状态 Fixed
缺陷类型 安全缺陷
严重程度 高
缺陷发现时间 2014-07-16
要求修复时间 2014-07-17
缺陷描述
跨站攻击,即Cross Site Script Execution(通常简写为XSS)是指攻击者利用网站程序对用户输入过滤不足,输入可以显示在页面上对其他用户造成影响的html代码,从而盗取用 户资料、利用用户身份进行某种动作或者对访问者进行病毒侵害的一种攻击方式。
安全隐患,攻击者可利用XSS漏洞获取用户cookie,传播蠕虫,篡改页面或进行钓鱼等
缺陷详情
跨站攻击,即Cross Site Script Execution(通常简写为XSS)是指攻击者利用网站程序对用户输入过滤不足,输入可以显示在页面上对其他用户造成影响的HTML代码,从而盗取用 户资料、利用用户身份进行某种动作或者对访问者进行病毒侵害的一种攻击方式。
安全隐患,攻击者可利用XSS漏洞获取用户cookie,传播蠕虫,篡改页面或进行钓鱼等
修复建议
对参数做html转义过滤(要过滤的字符包括:单引号、双引号、大于号、小于号,&符号),防止脚本执行。在变量输出时进行HTML ENCODE 处理。
php应用,可以使用htmlspecialchars对用户参数进行编码
ASP.net应用,可以使用AntiXSS
JAVA应用,可以使用org.apache.commons.lang.StringEscapeUtils提供的Escape函数
修复参考
(1)ASP:
问题示例代码:
<%
Dim param
Set param=Request.QueryString("dd")
response.write param
%>
修复范例:
<%
Dim param
Set param=Request.QueryString("dd")
response.write Server.HTMLEnCode(param)
%>
(2)PHP
问题代码示例:
<?php
$aa=$_GET['dd'];
echo $aa."123";
?>
修复范例:
<?php
$aa=$_GET['dd'];
echo htmlspecialchars($aa)."123";
?>
Bug页面url
http://www.yq139.com/index.php/login?url=31'13"42>24<99
Bug重现参数名称
url
Bug重现参数值
31\'13\"42>24<99
例如这样:
<?php
echo htmlentities($_POST['abc']);
?>
至于asp,默认就能防xss攻击,无需任何操作本回答被提问者采纳
记录一次网站漏洞修复过程:第二轮处理(拦截SQL注入跨站脚本攻击XSS)
在程序编写的时候采用参数化的SQL语句可以有效的防止SQL注入,但是当程序一旦成型,再去修改大量的数据库执行语句并不是太现实,对网页表单上输入进行校验是易于实现的方法。在webForm 页面中开启校验属性:
ValidateRequest="true"
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Line.aspx.cs" Inherits="EcospSite.Line" ValidateRequest="true" %>
但是有的时候也不太好使,只能自己编写代码检查用户的输入,如果直接在页面上添加校验,工作量比较大,并且需要很多测试工作,在global.asax 中 添加拦截方法还是比较合适的。
void Application_BeginRequest(object sender, EventArgs e) { string path = this.Request.Path.ToLower(); System.Collections.Generic.List<string> group_sql = new System.Collections.Generic.List<string>();
group_sql.AddRange(new string[] { "a.aspx", "b.aspx", "c.aspx", "d.aspx","e.aspx","f.aspx" });
foreach (string item in group_sql) { if (path.EndsWith(item)) { SQLCheck.CheckQueryParamRequest(this.Request, this.Response); // 检查URL中是否有非法语句 SQLCheck.CheckFormParamRequest(this.Request, this.Response); // 检查表单中是否有非法语句 break; } } }
如果输入没有校验通过,程序丢出异常,跳转到异常处理页面
对于处理 跨站脚本攻击XSS也可以采用同样的处理方式,不过校验的格式可能有所不同,一个是防止执行恶意SQL语句,一个是防止执行恶意脚本。另外在关键页面显示用户输入的地方,最好对内容进行转义处理,保证恶意嵌入的HTML、SCRITP无法执行。
以上是关于XSS(跨站脚本漏洞)谁帮忙修复下,我看着就头大,一窍不通啊。的主要内容,如果未能解决你的问题,请参考以下文章