本文目录一览:
- 1、常见的漏洞类型有哪些
- 2、XSS跨站脚本漏洞怎样修复
- 3、Java 为什么比 PHP 更加安全稳定可维护
- 4、如何安全检测Java Web应用网站漏洞
- 5、asp项目中如何防止xss攻击
- 6、xss是什么意思?
常见的漏洞类型有哪些
一、SQL 注入漏洞
SQL 注入攻击( SQL Injection ),简称注入攻击、SQL 注入,被广泛用于非法获取网站控制权, 是发生在应用程序的数据库层上的安全漏洞。在设计程序,忽略了对输入字符串中夹带的SQL 指令的检查,被数据库误认为是正常的SQL 指令而运行,从而使数据库受到攻击,可能导致数据被窃取、更改、删除,以及进一步导致网站被嵌入恶意代码、被植入后门程序等危害。
通常情况下, SQL 注入的位置包括:
(1)表单提交,主要是POST 请求,也包括GET 请求;
(2)URL 参数提交,主要为GET 请求参数;
(3)Cookie 参数提交;
(4)HTTP 请求头部的一些可修改的值,比如Referer 、User_Agent 等;
(5)一些边缘的输入点,比如.mp3 文件的一些文件信息等。
SQL 注入的危害不仅体现在数据库层面上, 还有可能危及承载数据库的操作系统;如果SQL 注入被用来挂马,还可能用来传播恶意软件等,这些危害包括但不局限于:
(1)数据库信息泄漏:数据库中存放的用户的隐私信息的泄露。作为数据的存储中心,数据库里往往保存着各类的隐私信息, SQL 注入攻击能导致这些隐私信息透明于攻击者。
(2)网页篡改:通过操作数据库对特定网页进行篡改。
(3)网站被挂马,传播恶意软件:修改数据库一些字段的值,嵌入网马链接,进行挂马攻击。
(4)数据库被恶意操作:数据库服务器被攻击,数据库的系统管理员帐户被篡改。
(5)服务器被远程控制,被安装后门。经由数据库服务器提供的操作系统支持,让黑客得以修改或控制操作系统。
(6)破坏硬盘数据,瘫痪全系统。
解决SQL 注入问题的关键是对所有可能来自用户输入的数据进行严格的检查、对数据库配置使用最小权限原则。通常使用的方案有:
(1 )所有的查询语句都使用数据库提供的参数化查询接口,参数化的语句使用参数而不是将用户输入变量嵌入到SQL 语句中。当前几乎所有的数据库系统都提供了参数化SQL 语句执行接口,使用此接口可以非常有效的防止SQL 注入攻击。
(2 )对进入数据库的特殊字符( '"\*; 等)进行转义处理,或编码转换。
(3 )确认每种数据的类型,比如数字型的数据就必须是数字,数据库中的存储字段必须对应为int 型。
(4)数据长度应该严格规定,能在一定程度上防止比较长的SQL 注入语句无法正确执行。
(5)网站每个数据层的编码统一,建议全部使用UTF-8 编码,上下层编码不一致有可能导致一些过滤模型被绕过。
(6)严格限制网站用户的数据库的操作权限,给此用户提供仅仅能够满足其工作的权限,从而最大限度的减少注入攻击对数据库的危害。
(7)避免网站显示SQL 错误信息,比如类型错误、字段不匹配等,防止攻击者利用这些错误信息进行一些判断。
(8)在网站发布之前建议使用一些专业的SQL 注入检测工具进行检测,及时修补这些SQL 注入漏洞。
二、跨站脚本漏洞
跨站脚本攻击( Cross-site scripting ,通常简称为XSS)发生在客户端,可被用于进行窃取隐私、钓鱼欺骗、窃取密码、传播恶意代码等攻击。XSS 攻击使用到的技术主要为HTML 和Javascript ,也包括VBScript和ActionScript 等。XSS 攻击对WEB 服务器虽无直接危害,但是它借助网站进行传播,使网站的使用用户受到攻击,导致网站用户帐号被窃取,从而对网站也产生了较严重的危害。
XSS 类型包括:
(1)非持久型跨站: 即反射型跨站脚本漏洞, 是目前最普遍的跨站类型。跨站代码一般存在于链接中,请求这样的链接时,跨站代码经过服务端反射回来,这类跨站的代码不存储到服务端(比如数据库中)。上面章节所举的例子就是这类情况。
(2)持久型跨站:这是危害最直接的跨站类型,跨站代码存储于服务端(比如数据库中)。常见情况是某用户在论坛发贴,如果论坛没有过滤用户输入的Javascript 代码数据,就会导致其他浏览此贴的用户的浏览器会执行发贴人所嵌入的Javascript 代码。
(3)DOM 跨站(DOM XSS ):是一种发生在客户端DOM (Document Object Model 文档对象模型)中的跨站漏洞,很大原因是因为客户端脚本处理逻辑导致的安全问题。
XSS 的危害包括:
(1)钓鱼欺骗:最典型的就是利用目标网站的反射型跨站脚本漏洞将目标网站重定向到钓鱼网站,或者注入钓鱼JavaScript 以监控目标网站的表单输入,甚至发起基于DHTML 更高级的钓鱼攻击方式。
(2 )网站挂马:跨站时利用IFrame 嵌入隐藏的恶意网站或者将被攻击者定向到恶意网站上,或者弹出恶意网站窗口等方式都可以进行挂马攻击。
(3)身份盗用: Cookie 是用户对于特定网站的身份验证标志, XSS 可以盗取到用户的Cookie ,从而利用该Cookie 盗取用户对该网站的操作权限。如果一个网站管理员用户Cookie 被窃取,将会对网站引发巨大的危害。
(4)盗取网站用户信息:当能够窃取到用户Cookie 从而获取到用户身份使,攻击者可以获取到用户对网站的操作权限,从而查看用户隐私信息。
(5)垃圾信息发送:比如在SNS 社区中,利用XSS 漏洞借用被攻击者的身份发送大量的垃圾信息给特定的目标群。
(6)劫持用户Web 行为:一些高级的XSS 攻击甚至可以劫持用户的Web 行为,监视用户的浏览历史,发送与接收的数据等等。
(7)XSS 蠕虫:XSS 蠕虫可以用来打广告、刷流量、挂马、恶作剧、破坏网上数据、实施DDoS 攻击等。
常用的防止XSS 技术包括:
(1)与SQL 注入防护的建议一样,假定所有输入都是可疑的,必须对所有输入中的script 、iframe 等字样进行严格的检查。这里的输入不仅仅是用户可以直接交互的输入接口,也包括HTTP 请求中的Cookie 中的变量, HTTP 请求头部中的变量等。
(2 )不仅要验证数据的类型,还要验证其格式、长度、范围和内容。
(3)不要仅仅在客户端做数据的验证与过滤,关键的过滤步骤在服务端进行。
( 4)对输出的数据也要检查, 数据库里的值有可能会在一个大网站的多处都有输出,即使在输入做了编码等操作,在各处的输出点时也要进行安全检查。
(5)在发布应用程序之前测试所有已知的威胁。
三、弱口令漏洞
弱口令(weak password) 没有严格和准确的定义,通常认为容易被别人(他们有可能对你很了解)猜测到或被破解工具破解的口令均为弱口令。设置密码通常遵循以下原则:
(1)不使用空口令或系统缺省的口令,这些口令众所周之,为典型的弱口令。
(2)口令长度不小于8 个字符。
(3)口令不应该为连续的某个字符(例如: AAAAAAAA )或重复某些字符的组合(例如: tzf.tzf. )。
(4)口令应该为以下四类字符的组合,大写字母(A-Z) 、小写字母(a-z) 、数字(0-9) 和特殊字符。每类字符至少包含一个。如果某类字符只包含一个,那么该字符不应为首字符或尾字符。
(5)口令中不应包含本人、父母、子女和配偶的姓名和出生日期、纪念日期、登录名、E-mail 地址等等与本人有关的信息,以及字典中的单词。
(6)口令不应该为用数字或符号代替某些字母的单词。
(7)口令应该易记且可以快速输入,防止他人从你身后很容易看到你的输入。
(8)至少90 天内更换一次口令,防止未被发现的入侵者继续使用该口令。
四、HTTP 报头追踪漏洞
HTTP/1.1 (RFC2616 )规范定义了HTTP TRACE 方法,主要是用于客户端通过向Web 服务器提交TRACE 请求来进行测试或获得诊断信息。当Web 服务器启用TRACE 时,提交的请求头会在服务器响应的内容(Body )中完整的返回,其中HTTP 头很可能包括Session Token 、Cookies 或其它认证信息。攻击者可以利用此漏洞来欺骗合法用户并得到他们的私人信息。该漏洞往往与其它方式配合来进行有效攻击,由于HTTP TRACE 请求可以通过客户浏览器脚本发起(如XMLHttpRequest ),并可以通过DOM 接口来访问,因此很容易被攻击者利用。防御HTTP 报头追踪漏洞的方法通常禁用HTTP TRACE 方法。
五、Struts2 远程命令执行漏洞
Apache Struts 是一款建立Java web 应用程序的开放源代码架构。Apache Struts 存在一个输入过滤错误,如果遇到转换错误可被利用注入和执行任意Java 代码。网站存在远程代码执行漏洞的大部分原因是由于网站采用了Apache Struts Xwork 作为网站应用框架,由于该软件存在远程代码执高危漏洞,导致网站面临安全风险。CNVD 处置过诸多此类漏洞,例如:“ GPS 车载卫星定位系统”网站存在远程命令执行漏洞(CNVD-2012-13934) ;Aspcms 留言本远程代码执行漏洞( CNVD-2012-11590 )等。
修复此类漏洞,只需到Apache 官网升级Apache Struts 到最新版本
六、框架钓鱼漏洞(框架注入漏洞)
框架注入攻击是针对Internet Explorer 5 、Internet Explorer 6 、与Internet Explorer 7 攻击的一种。这种攻击导致Internet Explorer 不检查结果框架的目的网站,因而允许任意代码像Javascript 或者VBScript 跨框架存取。这种攻击也发生在代码透过多框架注入,肇因于脚本并不确认来自多框架的输入。这种其他形式的框架注入会影响所有的不确认不受信任输入的各厂商浏览器和脚本。如果应用程序不要求不同的框架互相通信,就可以通过完全删除框架名称、使用匿名框架防止框架注入。但是,因为应用程序通常都要求框架之间相互通信,因此这种方法并不可行。因此,通常使用命名框架,但在每个会话中使用不同的框架,并且使用无法预测的名称。一种可行的方法是在每个基本的框架名称后附加用户的会话令牌,如main_display 。
七、文件上传漏洞
文件上传漏洞通常由于网页代码中的文件上传路径变量过滤不严造成的,如果文件上传功能实现代码没有严格限制用户上传的文件后缀以及文件类型,攻击者可通过Web 访问的目录上传任意文件,包括网站后门文件( webshell ),进而远程控制网站服务器。因此,在开发网站及应用程序过程中,需严格限制和校验上传的文件,禁止上传恶意代码的文件。同时限制相关目录的执行权限,防范webshell 攻击。
八、应用程序测试脚本泄露
由于测试脚本对提交的参数数据缺少充分过滤,远程攻击者可以利用洞以WEB 进程权限在系统上查看任意文件内容。防御此类漏洞通常需严格过滤提交的数据,有效检测攻击。
九、私有IP 地址泄露漏洞
IP 地址是网络用户的重要标示,是攻击者进行攻击前需要了解的。获取的方法较多,攻击者也会因不同的网络情况采取不同的方法,如:在局域网内使用Ping 指令, Ping 对方在网络中的名称而获得IP;在Internet 上使用IP 版的QQ直接显示。最有效的办法是截获并分析对方的网络数据包。攻击者可以找到并直接通过软件解析截获后的数据包的IP 包头信息,再根据这些信息了解具体的IP。针对最有效的“数据包分析方法”而言,就可以安装能够自动去掉发送数据包包头IP 信息的一些软件。不过使用这些软件有些缺点, 譬如:耗费资源严重,降低计算机性能;访问一些论坛或者网站时会受影响;不适合网吧用户使用等等。现在的个人用户采用最普及隐藏IP 的方法应该是使用代理,由于使用代理服务器后,“转址服务”会对发送出去的数据包有所修改,致使“数据包分析”的方法失效。一些容易泄漏用户IP 的网络软件(QQ 、MSN 、IE 等)都支持使用代理方式连接Internet ,特别是QQ 使用“ ezProxy ”等代理软件连接后, IP 版的QQ 都无法显示该IP 地址。虽然代理可以有效地隐藏用户IP,但攻击者亦可以绕过代理, 查找到对方的真实IP 地址,用户在何种情况下使用何种方法隐藏IP,也要因情况而论。
十、未加密登录请求
由于Web 配置不安全, 登陆请求把诸如用户名和密码等敏感字段未加密进行传输, 攻击者可以窃听网络以劫获这些敏感信息。建议进行例如SSH 等的加密后再传输。
十一、敏感信息泄露漏洞
SQL 注入、XSS、目录遍历、弱口令等均可导致敏感信息泄露,攻击者可以通过漏洞获得敏感信息。针对不同成因,防御方式不同。
XSS跨站脚本漏洞怎样修复
尝试过滤参数,对用户输出进行转义或者过滤。一般/\^"'这些如果不需要都过滤一遍,其对应的转义也记得过滤一下,安全性就会提高吧。
我水平有限。这是我当前水平下可以做出的回答。
Java 为什么比 PHP 更加安全稳定可维护
其实我个人觉得语言的选择,不能说决定代码的稳定性,或者说是可维护性的高低,因为这两个主要还是看代码的本身。
编码可以说所有的东西JAVA还有PHP主要都是看编码和代码的。
也可以这样说JAVA,大小写比较敏感。但是PHP对方法名啊,或者函数。这些基本上是不区分大小写的他都可以的。
其实我个人觉得,如果说是用JAVA的话可以更好的让你更加流利,或者说是更加快捷方便的去写一个更好的统一的一个编码,或者说一个代码这样话就会利于维护啊,或者阅读这样的话,你其实用JAVA的话会比较方便一些,毕竟PHP他之间相互的过程方程式啊,这些编程的问题可能没有JAVA方便。
入门而言其实因为JAVA的一些门道儿,就像他对大小写啊,他就必须要十分规范地写出来。所以说,你再这样的训练之下,你做出来的东西就会比较规范,比较稳定了。
但是PHP吧,这个东西写的就很随意一点,比如说大小写,不需要那么区分啊,然后你觉得就是说你自己可以完成啊,并且说如果说作为入门的话,其实我个人觉得会更多人喜欢PHP吧,因为这样的话你就觉得其实自己是可以操作的了,可以写出来的,但是。PHP那些不规格的方式可能会毁了你,因为你已经习惯于不用区分大小写之类的。毕竟这的规范模板。就像网上流传的一句话。
总结其实我个人来说的话你不管说是用JAVA还是用PHP的话,其实这个东西都是看个人的吧。
JAVA像是一个建筑家,但是PHP是一个流浪派的艺术家
因为你这个的话,有的人其实从刚开始学习的时候,他就会比较规范,那就会觉得JAVA的那些条条框框,对于他来说没有一定的限制,更加的清晰明白。你如果说从一开始就是大小写或者那些规矩啊,没有弄清楚,然后你就会觉得PHP,更喜欢,因为这样的话你就会觉得,没有那么多的事儿,但是我还是可以编辑成语言,然后接着还是可以调成一个很完美的语言。
但是你如果说哪个更加的安全稳定,并且可以维护的话,这个就看开发者的水平来保证的是没有办法说他们两个到底哪个更好,因为完全取决于代码,编程的问题就是掌握在使用的人的手里。
如何安全检测Java Web应用网站漏洞
如何安全检测Java Web应用网站漏洞.txt32因为爱心,流浪的人们才能重返家园;因为爱心,疲惫的灵魂才能活力如初。渴望爱心,如同星光渴望彼此辉映;渴望爱心,如同世纪之歌渴望永远被唱下去。web开发应用程序(网站),是目前应用最广泛的程序。但是开发者的水平参差不齐,导致了各种各样web漏洞的出现。本文站在分层架构的角度,分析一下如何在java web程序中找到可能出现的种种漏洞。 本文讨论的只是web程序上的漏洞,和其它漏洞,是相对独立的。这句话看似废话,实际上却说明了时常被忽略的因素,即:“很多人认为只要我开发web程序没有漏洞,web服务器就安全了”,事实上,并非如此。一个合格的web程序开发人员,应该时刻清楚自己开发的程序会在什么环境中被使用,以及一旦自己的程序产生某种漏洞,最终会导致什么后果。简单的说,web程序被安装在一台或多台(分布式)web服务器上,一旦安装成功,就等于在为广大用户提供服务的同时,给入侵者打开了一条或N条新的思路。如果服务器管理员刚好对安全配置不了解(事实上,国内这种管理员居多),那么只好由我们的程序来守好最后的关卡最后一道防线。 看了本文题目,一定有一部分人会认为,“不就是讲JSP漏洞么,用得着披着这么厚的包装么?”,为了回答这个疑问,我们先看看JSP和ASP的开发有什么不同吧。在ASP时代(ASP,PHP等语言),开发一套系统往往比修改别人已经写好的系统痛苦的多,因为它们把所有的代码(包括链接数据库的代码、执行SQL语句的代码、控制页面显示的代码)统统都放在%......%中,我们时常会看到如下代码块: -----------代码来自某ASP SHELL----------- Function GetFileSize(size) Dim FileSize FileSize=size / 1024 FileSize=FormatNumber(FileSize,2) If FileSize 1024 and FileSize 1 then GetFileSize="font color=red" FileSize "/font KB" ElseIf FileSize 1024 then GetFileSize="font color=red" FormatNumber(FileSize / 1024,2) "/font MB" Else GetFileSize="font color=red" Size "/font Bytes" End If End Function ---------------------------------------- 如果客户的需求变了,要求页面不能使用“font color=red”等标签,全部应用“CSS”显示。挂了,把程序员召唤出来,一个一个的改吧。。。注意,这里强调下,特指“召唤程序员”才能改,如果是学美工的,只会HTML、JS、CSS,完了,这活还干不成。而这些只是简单的页面修改,如果客户今天说,MYSQL服务器承担不了这个数据量,要挂Oracle,可怜的程序员就要在一片一片的代码海洋里寻找执行SQL语句的代码,而每一个文件都可能存放着SQL语句,意味着每一个文件都可能在受SQL注入的威胁。
而JSP采用MVC模式分层架构进行开发,就可以把所有的文件分开,根据其用途,分别放在不同的文件夹下(分层),每个文件夹下的文件只负责自己的事情。例如数据访问层的代码就放在数据访问层的文件夹下,业务逻辑层的代码也都放在自己的文件夹下,当显示层(这一层是为了把最终的运算结果显示给用户看)的需求发生变化,就像前面的客户需求,我们只要修改这一层的文件就是了,其他层的代码根本不需要动,而修改者也不需要懂得其它层的代码。 代码分层了,意味着漏洞也在跟着分层,我们寻找JSP漏洞的思路也要跟着分层,才能与时俱进。 下面在讲述寻找漏洞的过程中,本文就拿一个简单的分层架构例子来做样板。样板程序的名称为“XX文章系统”,系统使用了STRUTS框架,和安全有关的层分为: “DB层”,这一层存放了链接数据库的字符串,以及JdbcTemplate类,直接访问数据库。因为在java中,执行SQL语句的函数按照返回值可以分为三类,所以在这一层定义了JDBC模版类(JdbcTemplate),每一次使用操作数据库时都要执行这一层的三个方法其中一个。 “DAO层(Data Access Object数据访问对象层)”,从安全角度上看,这一层存放了SQL语句(并不执行SQL语句,语句传给DB层执行)。这一层调用“DB层”访问数据库,它只知道“DB层”的存在,不知道数据库的存在。 “SERVICE层”,业务逻辑层,因为一个业务的实现,并不是一次数据库访问就可以完成的,所以这一层通过N次调用“DAO层的方法”实现业务逻辑,它只知道“DAO层”的存在,不知道“DB层”和数据库的存在。 “ACTION层”,调用业务逻辑层,根据返回的结果,控制JSP页面显示。它只知道业务层的存在。这一层是入侵者的攻击平台。 “Form层”,把用户POST提交的信息封装成Form对象,经过验证后提交给ACTION层处理。 “JSP层”(显示层),这一层是最终显示给用户看的页面,同时也是入侵者的攻击平台。 用户通过访问ACTION层,自动会发生:“ACTION调用SERVICE,SERVICE调用DAO,DAO调用DB,DB执行SQL语句返回结果给DAO,DAO返回给SERVICE,SERVICE返回给ACTION,ACTION把数据显示到JSP里返回给用户”。 有了样板,我们来分析这套程序中可能出现的各种web漏洞。 1、SQL注入漏洞 从SQL注入漏洞说起吧,在web漏洞里,SQL注入是最容易被利用而又最具有危害性的。怎么快速的找到呢?先分析流程,就拿用户查看文章这个流程为例:用户访问一个
action,告诉它用户想看ID为7的文章,这个action就会继续完成前面所说的流程。 如果是ASP程序,这就是最容易产生问题的时候,ASP是弱类型,接到参数后不需要转换类型,就和SQL语句连加起来。但是JSP就不一样,JSP是强类型的语言,接受有害的参数后:对于GET请求(直接在地址栏访问页面),如果这里要的是int型,即使不懂安全的程序员,也会把它(文章的ID)立刻转换成int,因为这里转换后在后面的处理中会更容易操作,而这时程序就出错了;对于POST请求,如果这里要的是int型,程序会在把它封装成Form对象时,因为自动要进行类型转化,同样发生错误,这两种错误发生后,根本不会访问后面的流程就跳出了,或许这就是JSP天生的安全性。所以,通常提交的变量是int时,不会发生问题,问题会出现在string参数这里,如果要查看某用户的信息,程序可能会让你提交如下参数:showuser.do? username=kxlzx。问题来了,因为这里是string类型,所以不懂安全的程序员顶多会判断一下是不是空,就连加成为SQL语句。有漏洞的程序大概会写成这个样子: ACTION的代码: showuser.do String username = null; username = request.getParameter("username"); Service service = new Service(); service.findByUsername(username); 得到参数后调用service,service层直接交给了Dao层,dao的代码: public Object findByUsername(String username) { JdbcTemplate jt=new JdbcTemplate(); String sql = "select * from Users where username=’"+username"’"; List list = jt.query(sql); ................... } dao调用了DB层的JdbcTemplate,把SQL语句拼好后,传给了JdbcTemplate去执行。不用再看这里的JdbcTemplate,就可以知道里面的代码使用了Statement的executequery()方法执行,导致了SQL注入。 分析了这么半天,有读者会问:“难道我要费这么大的力气才能找到漏洞么?”。的确,通常在ASP程序里找注入时的思路就是这样子,但是我们现在是在使用了开发模式分层架构的JSP程序里,应该按照分层架构的思维去找漏洞。在回答这个问题之前,我们还得绕个弯子,看看怎么在这里预防SQL注入(java始终都是这么优美,它不会直接告诉你答案,而是一层一层的让你拨开云雾)。 刚才分析流程,是从正向分析的,从用户输入到产生漏洞,我们在防御的时候,不妨倒过来看看,从DB层入手。JdbcTemplate调用执行SQL语句,可以有两个类供我们选择,一个是Statement,另一个就是预处理的Statement,两者有着效率上和安全上的显著差别。在效率上,只要数据库支持预处理技术(sqlserver,mysql,oracle等都支持,只有少数access等不支持),就会在大量执行SQL语句时增加速度;在安全上,使用预处理,会把接受的参数也经过预处理,从而不会作为SQL语句的一部分执行,而是仅仅作为SQL语句中的参数部分
内容被执行。一旦DB层使用了预处理,DAO层的SQL语句也会发生变化,成为这个样子: public Object findByUsername(String username) { JdbcTemplate jt=new JdbcTemplate(); String sql = "select * from Users where username=?"; List list = jt.query(sql,new Object[1]{username}); ................... } 这样,SQL注入就和我们的程序几乎无关了,注意我说的是几乎,而不是全部。知道了怎么防御,于是一切在这里变的简单极了,我们应该直接去DB层找到JdbcTemplate,看看代码,一旦使用了Statement,很好,这个系统十有八九有漏洞,下面要做的是使用Editplus搜索“request.getParameter”。没有使用预处理的系统,可能会在action层进行防御,对参数过滤,但总有防御不到的时候,因为战线拉的太长了,每一个action里都可能接受参数并存在漏洞。 还有一种情况,系统一部分使用了预处理,一部分没有,这样的情况可能是因为项目赶的比较仓促,人员没有经过正规培训,最后艰难的整合到了一起。这种情况也好办,直接在DAO层搜索("’)或(’"),这些符号用于和字符串变量连加,拼SQL语句,肯定是这些语句之后的代码使用了Statement。然后再往上层找,看看哪个action调用了这个有问题的dao类,也可能发生SQL注入。 即使系统使用了预处理,别忘了,程序给客户使用后,客户有权利去扩展的。程序拿到客户那里,客户有了新的需求,而这个需求又不大,很可能不愿意花钱重新雇人来实现扩展功能,在这个时候也可能出现问题,客户使用自己的程序员扩展AJAX功能,这个程序员因为怕出问题,不敢动源程序,就在web.xml里加了一个servlet,这个servlet直接去调用conn。可怕的事情发生了。所以,我们的搜索漏洞规则中又加上了一条,在非dao层的文件中,搜索“select,update,delete”等字符串。 2、暴露程序信息漏洞 这个漏洞是怎么来的呢?我们需要从异常说起。有经验的入侵者,可以从JSP程序的异常中获取很多信息,比如程序的部分架构、程序的物理路径、SQL注入爆出来的信息等,这个漏洞很容易防御,却很难快速定位漏洞文件。出现这样漏洞的时候,通常是我们在写代码的时候,少了一些可能性的考虑而导致的。这样的问题都是经验造成的,而寻找漏洞也要通过经验加运气(要有仙缘。。。),我个人技术有限,就不多说了。防御的方法就是在程序中加上“Exception层”,自定义异常,把系统产生的异常统统包装起来,不要放过任何一个可能产生异常的地方。像腾讯的异常就包装的很好“对不起,今天的注册人数已经达到十万,请您明天再来。。。”,废话,日注册量都十万,还让不让人活啦,铁定是程序发生了异常,不敢让各位大大们看到真实的面孔。
asp项目中如何防止xss攻击
asp中防止xss攻击的方法如下:
确保所有输出内容都经过 HTML 编码。
禁止用户提供的文本进入任何 HTML 元素属性字符串。
根据 msdn.microsoft.com/library/3yekbd5b 中的概述,检查 Request.Browser,以阻止应用程序使用 Internet Explorer 6。
了解控件的行为以及其输出是否经过 HTML 编码。如果未经过 HTML 编码,则对进入控件的数据进行编码。
使用 Microsoft 防跨站点脚本库 (AntiXSS) 并将其设置为您的默认 HTML 编码器。
在将 HTML 数据保存到数据库之前,使用 AntiXSS Sanitizer 对象(该库是一个单独的下载文件,将在下文中介绍)调用 GetSafeHtml 或 GetSafeHtmlFragment;不要在保存数据之前对数据进行编码。
对于 Web 窗体,不要在网页中设置 EnableRequestValidation=false。遗憾的是,Web 上的大多数用户组文章都建议在出现错误时禁用该设置。该设置的存在是有原因的,例如,如果向服务器发送回“X”之类的字符组合,该设置将阻止请求。如果您的控件将 HTML 发送回服务器并收到图 5 所示的错误,那么理想情况下,您应该在将数据发布到服务器之前对数据进行编码。这是 WYSIWYG 控件的常见情形,现今的大多数版本都会在将其 HTML 数据发布回服务器之前对该数据进行正确编码。
对于 ASP.NET MVC 3 应用程序,当您需要将 HTML 发布回模型时,不要使用 ValidateInput(false) 来关闭请求验证。只需向模型属性中添加 [AllowHtml] 即可,如下所示:
public class BlogEntry
{
public int UserId {get;set;}
[AllowHtml]
public string BlogText {get;set;}
}
xss是什么意思?
XSS攻击通常指的是通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。这些恶意网页程序通常是JavaScript,但实际上也可以包括Java、 VBScript、ActiveX、 Flash 或者甚至是普通的HTML。攻击成功后,攻击者可能得到包括但不限于更高的权限(如执行一些操作)、私密网页内容、会话和cookie等各种内容。