Web应用程序中SQL注入攻防策略的研究

Web应用程序中SQL注入攻防策略的研究
Web应用程序中SQL注入攻防策略的研究

2011.09·https://www.360docs.net/doc/1210868380.html,

TechnologyandStudy·技术探讨

王希忠1黄俊强1周长利2方舟1

(1.黑龙江省电子信息产品监督检验院黑龙江哈尔滨150090;2.哈尔滨工程大学计算机科学与技术学院黑龙江哈尔滨150001)

【摘要】当前全球进入网络信息一体化时代,网络信息安全问题应运而生。从列举日趋高发的SQL 注入攻击事件入手,阐述了SQL 注入攻击概念、特点,然后通过一个实例讲解了攻击的一般过程,最后按照从程序开发到应用这个顺序,提出了Web 应用程序防御SQL 注入攻击的全过程安全策略。

【关键词】Web 应用程序;

SQL 注入攻击;防范策略;信息安全The A ttack and D efense Strategy of SQL Injection in W eb A pplications

Wang Xi-zhong1Huang Jun-qiang1Zhou Chang-li2Fang Zhou1

(1.HLJ Province Electronic &Information Products Supervision Inspection Institute Harbin 150090;2.College of Computer Science and Technology of Harbin Engineering University Harbin 150001)

【A bstract 】Currently the w orld gets into the information era,the netw ork information security problems arise at the historic moment.This paper began w ith the w orsening instances of SQLinjection attack,w e explained the principle and characteristics of SQLinjection,then expounded the process of attack through an example.Finally,a defensive method for SQLinjection called w hole process securitypolicyhad been proposed for w eb sites 【K eywords 】w eb applications;SQLinjection;defense strategy;information security

Web 应用程序中

SQL 注入攻防策略的研究

0.引言

随着计算机技术的飞速发展,信息网络已经成为社会发展的重要保证。

信息网络涉及到国家的政府、军事、文教等诸多领域,存储、传输和处理的许多信息是政府宏观调控决策、商业经济信息、银行资金转账、股票证券、能源资源数据、科研数据等重要的信息。其中有很多是敏感信息,甚至是国家机密,所以难免会吸引来自世界各地的各种人为攻击(例如信息泄漏、信息窃取、

数据篡改、数据删添、计算机病毒等)。计算机网络系统面临着巨大的威胁,而针对Web 应用程序和数据库的攻击已成为网络安全焦点。

根据互联网犯罪举报中心发布的报告显示,2008年SQL 注入攻击数量增加,特别是与金融服务和在线零售业网站相关联;IBM 网络安全系统部门的研究员克罗斯指出,2008年IBM 监控的SQL 攻击数量达到每天5000次,他还说由于攻击者利用自动搜索工具查找网站站点进行攻击,这一数值已上升至每天一百万次。IT 安全与控制公司Sophos 发布的2009年网络安全威胁报告将SQL 注入攻击列为六大安全威胁之首。较前有网络安全公司关于Web 应用程序调查研究报告表明,92%以上的Web 应用程序有可能受到黑客攻击,其中,可能遭受SQL 注入攻击的就有60%。

随着B/S 模式的网络服务构架技术的应用被普遍采用,使用Web 脚本语言和后台数据库系统开发的网站占70%以上。这使得攻击者可以利用SQL 语法攻击存在安全漏洞的这类网站,通过向网站的数据库中提交恶意代码,从而获取网站数据库中的敏感信息。并且,黑客们已经开发出自动化的工具,利用搜索引擎找出可能存在漏洞的网站,然后发动攻击。

利用网站安全弱点特别是SQL 注入攻击将会成为恶意软件散播的主要渠道。而根据IBM2009年发布的年度《X-Force 趋势和风险报告》对Web 应用程序进行的调查显示,到2009年底67%的Web 应用程序漏洞没有发布任何补丁,这些漏洞

56··

技术探讨·TechnologyandStudy

最有可能导致数据丢失及其他危害。至今,SQL注入攻击数量继续高位运行。

1.SQL注入攻击概述

1.1SQL注入攻击定义

SQL注入攻击(SQL Injection Attack)最早出现在1998年,2002年在我国大量出现,其实质是攻击者利用有数据库连接的Web应用程序中的一种漏洞,构造巧妙的SQL语句,通过WWW端口提交给服务器,欺骗服务器执行非授权的查询等操作,通过判断服务器返回的提示信息,攻击者可以获得例如管理员登录密码等数据库中的敏感信息。

正是由于攻击过程中主要以构造巧妙结构化查询语句(SQL),提交给服务器执行,这个提交的过程类似向健康人身体中注入(Injection)病毒一样,故称为SQL注入攻击。这种攻击之所以会高居每年攻击手段统计表榜首,究其原因,一方面是注入技术不断成熟,智能化注入工具使攻击更为简单,成功率更高。另一方面是在B/S模式下编写的应用程序越来越多,由于程序员水平及经验良莠不齐,在编写代码的时候,没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患。

目前为止,对于SQL攻击还没有一个标准的定义,微软技术中心从两个方面进行了描述:

1)脚本注入式攻击;

2)恶意用户输入用来影响被执行的SQL脚本。

Web应用程序安全联盟词汇(Web Application Security Consortium Glossary)将其描述为:“通过构造后台SQL语句操纵应用程序来发掘(可攻击)网站的攻击技术”。Stephen Kost给出了SQL注入的一个特征:“从一个数据库获得未经授权的访问和直接检索”。

1.2SQL注入攻击特点

普通防火墙无法防御所有威胁,由于防火墙允许合法的Internet用户通过Web应用程序访问数据库,一旦Web应用程序存在SQL注入漏洞,攻击者就可以通过合法的身份从正常的WWW端口访问,而表面上与访问一般的Web页面没有什么区别,这使得防火墙不会对SQL注入攻击发出警报,如果管理员没有定期查看日志的习惯,则可能被入侵很长时间都不会察觉。

攻击者利用这样的合法身份不仅可以访问数据库,甚至可以通过WWW端口向数据库提交添加具有管理员权限用户的SQL语句,从而获得Web服务器的管理权限,进而盗取网站的资源或在网站中植入木马或恶意代码,利用访问该网站的广大用户进一步传播恶意代码。因此,SQL注入攻击具有极大危害。

1)攻击范围广。SQL注入攻击几乎可以攻击所有存在漏洞的基于SQL语言标准的Web数据库软件,如果Web应用程序没有对用户提交的语句进行严格规范,都会存在被攻击的可能。

2)技术难度低。由于目前攻击者开发了智能化的攻击软件并在网络上广泛流传,如“啊D注入工具”、“明小子注入工具”、“NBSI注入工具”等,因此攻击者不必具备专业的技术知识,甚至只要会使用鼠标即可发动SQL攻击,就可获取服务器控制权。

3)隐蔽性高。SQL注入攻击常通过正常的HTTP服务端口,以合法用户身份对Web数据库进行访问与修改,而防火墙不会发出警报,因此具有较高的隐蔽性。

4)危害性大。一旦攻击成功后,攻击者不仅可以获得操纵网站数据的权限,而且可以通过上传木马或恶意代码,进一步控制整个Web服务器上的其它网站,并利用访问网站的其他用户传播恶意代码,感染更多的计算机。

2.SQL注入攻击原理分析

首先,我们在分析原理前应对服务器返回信息在Web页中的显示做简单配置,把IE菜单=>工具=>Internet选项=>高级=>显示友好HTTP错误信息前面的勾去掉。这样我们利用本机对某个服务器测试时,能够返回相应的数据。否则,不论服务器返回什么错误,IE都只显示为“HTTP500服务器错误”,不能获得更多的提示信息。

1.3基本原理简述

由于目前采用ASP架构的网站占70%左右,限于篇幅,以下我们均以此架构进行阐述。假设某个网站地址为:http: //https://www.360docs.net/doc/1210868380.html,/abc.asp?id=66我们在这个地址后面加上单引号’回车提交后,服务器会在Web页面返回如下的错误提示:“Microsoft JET Database Engine错误'80040e14'

字符串的语法错误在查询表达式'id=66'中/abc.asp,行8”

从这个错误提示中我们能看出几点。

1)网站使用的是Access数据库,通过JET引擎连接数据库,而不是通过ODBC。

2)程序没有判断客户端提交的数据是否合法。

3)所查询的数据库表中有一名为id的字段。

从上面的例子我们简单阐述了SQL注入攻击的基本原理,即从客户端提交特殊的代码,从而收集程序及服务器的信

57

··

信息安全与技术·2011.09

TechnologyandStudy·技术探讨

息,获取要得到的重要资料。

1.4SQL注入攻击的一般步骤

注入攻击的实现过程一般遵循以下步骤:

1)判断是否有注入漏洞

对SQL注入有一点了解的程序员认为只要把上面方法中用到的单引号过滤掉就安全了,如果只用单引号测试,是测不到注入点的。这里我们介绍一个经典的“1=1、1=2测试法”如下:

①https://www.360docs.net/doc/1210868380.html,/abc.asp?id=66

②https://www.360docs.net/doc/1210868380.html,/abc.asp?id=66and1=1

③https://www.360docs.net/doc/1210868380.html,/abc.asp?id=66and1=2

得到返回结果与分析如下:

①正常显示,没有添加任何SQL语句提交。

②正常显示,返回结果基本与①相同

③页面出现错误,无法正常显示页面。

通过这样的返回结果,我们基本可以确定某一个网页是否存在注入漏洞。

2)判断数据库类型

不同的数据库的函数、注入方法都是有差异的,所以在注入之前,我们还要判断一下数据库的类型。一般ASP最常搭配的数据库是Access和SQL Server。在确认可以注入的情况下,Access和SQL Server都有自己的系统表,构造下面的SQL语句:

https://www.360docs.net/doc/1210868380.html,/abc.asp?id=66and(select count(*) from sysobjects)>0

https://www.360docs.net/doc/1210868380.html,/abc.asp?id=66and(select count(*) from msysobjects)>0

如果数据库是SQL Server,那么第一个网址的页面与原页面是大致相同的;而第二个网址,由于找不到表msysobjects,会提示出错,即使程序有容错处理,页面也与原页面完全不同,否则可判断为Access数据库。

3)猜解表名、字段名和表中的每条记录内容

同样,我们利用提交的数据库查询语句判断是否存在我想要的表,例如构造查询表语句:

and(select count(*)from admin)

如果页面返回的页面无变化,则可判断表名为admin。此方法就是根据个人经验猜解表名,一般admin,adminuser,user, users,member,members,userlist,memberlist,userinfo,manager, systemuser,systemusers,sysuser,sysusers,sysaccounts,systemaccounts 等是比较常见的表名。

在此基础上进一步构造查询判断列语句:

and(select count(username)from admin)>0

and(select count(password)from admin)>0

同理如果返回页面正常则在admin这个表中存在username、password这两个列。这样攻击者通过不断向服务器提交构造的带有猜测性质的查询语句,可以获得想要的数据库信息。

4)爆出管理员用户名及密码

确定表和列后,地址后面输入order by N,N代表任意数字,若是返回正常,下一个也就是N+1返回不正常则确定值为N。确定这个N值是为了下面的攻击做准备,这里假设N值为20。若我们通过上面查询得到表是admin,则在后面再写from admin,最终联合查询的方式地址为:https://www.360docs.net/doc/1210868380.html,/abc. asp?id=66and1=2union select1,2,3,4,5,6,7,8,9,10,11,12,13,14,15, 16,17,18,19,20from admin

当我们将上述查询提交给服务器后,页面中原有的文本处会返回一些数字,这些返回的数字就是会爆出管理员用户名和密码的地方。假如返回的数字分别为5和13我们将上面的地址5处替换为“username”,将13的地方替换为“password”,再次提交给服务器,这时服务器返回的页面就会爆出管理员的录的用户名和密码。

这样我们通过在网站地址后添加事先构造好的SQL语句提交给服务器执行,通过返回页面是否正常显示,来判断数据库中是否存在某个数据这样简单的步骤,就得到了该网站管理员的用户名和密码,下面是对真实网站实验得到的结果,如图1所示(为安全起见,模糊了该网页的地址,该网站目前已经对漏洞进行了修补,图中横线处即为爆出的该站管理员用户名和密码,均为lawyer):

图1爆出网站管理员用户名和密码

某些情况下,在网页中爆出的是经过MD5加密过的用户名和密码,而攻击者可以利用软件暴力破解,另外当前一些破

58··□

2011.09·https://www.360docs.net/doc/1210868380.html,

技术探讨·TechnologyandStudy

解网站也提供了在线破解查询功能,这又进一步促进了SQL 注入攻击的泛滥。

注入攻击防范策略

如何构建一个安全的Web服务器,免受SQL攻击成为安防的主要问题,而单一地对网络用户提交的数据进行过滤又无法彻底防御SQL攻击。例如我们过滤了“select”等敏感字符串通过Web端口的输入,但攻击者只需要把该字符串改写成“SeLect”等形式就可以避开输入验证,并能正常执行该SQL语句。

图2全过程安全策略模型

因此这就需要有一个完备的安全策略,而不是采用单一的防范方法,这里我们提出了一个从应用程序开发到Web服务器架设程序运行的“全过程安全策略”,该策略从Web应用程序代码开发的程序员和服务器管理员两个角度较为全面的阐述了对SQL攻击的防御方法,涵盖了从程序开发到程序应用的整个过程,并在实验中取得了良好的效果。安全策略模型如图2所示。

1.5应用程序开发阶段防御SQL攻击

数据库安全不是孤立的,其他应用程序可以通过接口存取数据库。程序员在开发Web程序过程中,需要考虑到可能发生的SQL注入攻击,这就要求程序员编写能够在应用程序端防御SQL注入的程序代码。攻击者通过http服务的注入攻击请求不外乎get和post,新近出现了利用cookies提交请求,所以选择过滤所有post、get和cookies请求中的参数信息中非法字符的方法,代码如下:

<%

SQL_In="’

|and|select|insert|delete|update|set|chr|count|char|de-

clare|script|iframe|char|truncate|exec|*|%"

SQL_attack="attacker.txt"

SQL_Inf=split(SQL_In,"|")

'**********对POST提交的过滤*************

If R equest.Form<>""Then

For Each SQL_Post In R equest.Form

For SQL_Xh=0To Ubound(SQL_Inf)

If Instr(LCase(R equest.Form(SQL_Post)),SQL_Inf (SQL_Xh))<>0Then

flyaway1=now()&""&R equest.ServerVariables ("R EMOTE_ADDR")&","&R equest.ServerVariables("UR L") &"+'post'+'"&SQL_Inf(SQL_Xh)&"'+"&SQL_post&"+"&replace (R equest.Form(SQL_post),"'","(*)")&""

SQL_bb=SQL_Inf(SQL_Xh)

set fs=server.CreateObject("Scripting.FileSystemObject")

set file=fs.OpenTextFile(server.MapPath(SQL_attack),8,True) file.writeline flyaway1

file.close

set file=nothing

set fs=nothing

R esponse.Write"本服务器防注入程序提示请不要尝试注入--"+replace(SQL_bb,"(*)",",'")+"你的攻击已经被记录,并提交到相关部门!!!"

R esponse.Write"


"

R esponse.End

End If

Next

Next

End If

'**************对GET提交的过滤************

If R equest.QueryString<>""Then

For Each SQL_Get In R equest.QueryString

For SQL_Xh=0To Ubound(SQL_Inf)

If Instr(LCase(R equest.QueryString(SQL_Get)), SQL_Inf(SQL_Xh))<>0Then

flyaway2=now()&""&R equest.ServerVariables ("R EMOTE_ADDR")&","&R equest.ServerVariables("UR L") &"+'get'+'"&SQL_Inf(SQL_Xh)&"'+"&SQL_get&"+"&replace (R equest.QueryString(SQL_get),"'","(*)")&""

SQL_bb=SQL_Inf(SQL_Xh)

set fs=server.CreateObject("Scripting.FileSystemObject")

set file=fs.OpenTextFile(server.MapPath(SQL_attack),8,True)

Web应用程序开发阶段

(程序员)Web应用程序运行阶段

(管理员)

1.Web应用程序代码开发阶段添加防注入功能

2.Web数据库安全性设计1.Web服务器防注入

功能设置

2.Web数据库服务器

安全性设置

3.服务器管理员应注

意的问题

59

··

信息安全与技术·2011.09

TechnologyandStudy·技术探讨

file.writeline flyaway2

file.close

set file=nothing

set fs=nothing

R esponse.Write"本服务器防注入程序提示请不要尝试注入--"+replace(SQL_bb,"(*)",",'")+"你的攻击已经被记录,并提交到相关部门!!!"

R esponse.Write"


"

R esponse.End

End If

Next

Next

End If

'**********对cookies提交的过滤***********

If R equest.Cookies<>""Then

For Each SQL_cook In R equest.Cookies

For SQL_Xh=0To Ubound(SQL_Inf)

If Instr(LCase(R equest.Cookies(SQL_cook)),SQL_Inf (SQL_Xh))<>0Then

flyaway3=now()&""&R equest.ServerVariables ("R EMOTE_ADDR")&","&R equest.ServerVariables("UR L") &"+'cookies'+'"&SQL_Inf(SQL_Xh) &"'+"&SQL_cook&"+"&replace(R equest.Cookies(SQL_cook),"'", "(*)")&""

SQL_bb=SQL_Inf(SQL_Xh)

set fs=server.CreateObject("Scripting.FileSystemObject")

set file=fs.OpenTextFile(server.MapPath(SQL_attacker),8, True)

file.writeline flyaway3

file.close

set file=nothing

set fs=nothing

R esponse.Write"本服务器防注入程序提示请不要尝试注入--"+replace(SQL_bb,"(*)",",'")+"你的攻击已经被记录,并提交到相关部门!!!"

R esponse.Write"


"

R esponse.End

End If

Next

Next

End If

%>

将上述代码作为独立命名的页,并将该页用include方法放在数据库连接文件conn.asp头部进行引用,这样所有读写Web数据库的操作,都会经过该代码过滤,这就保证了在代码开发阶段实现了对SQL注入攻击的有效防御。该代码解决了上面提到了利用大小写区别提交SQL注入语句等问题,而且增加了IP记录、受攻击页面记录和攻击方式记录等功能,使得管理员在查看攻击记录时更为方便。页面返回的防御效果及攻击记录合并如图3所示:

图3防注入程序实验效果图

另外,程序开发者在设计数据库时,应当重视数据库安全性设计,例如数据库命名应当尽量长些并尽量放在网站根目录下,数据库表名字、字段名尽量不合常规,这样可以避免数据库的重要信息被猜解出来。网站的目录名和登录页面尽量复杂些,不提倡出现常见的admin、login等字符,这样可使攻击者找不到管理员登录入口。通过这些方法可以构建起一个较为安全的Web数据库环境。

1.6服务器架设运行阶段防御SQL攻击

另一方面,在程序代码方面对SQL注入攻击进行防御后,应用程序的使用者或服务器管理员同样需要构建起一个有效的防御系统,从另一个角度防御可能出现的SQL注入攻击,确保服务器处于一个安全的环境中。这里我们从Web服务器和数据库服务器两个方面来进行安全配置。

1)Web服务器设置

在Web服务器设置过程中,以IIS为例,如果把IIS设置为“向客户端发送详细的ASP错误”,攻击者则可以通过IIS服务器返回的异常信息来收集和判断服务器端的信息。针对这一问题的防御措施是将IIS默认的异常提示页面由500-100改为500即可,这样无论程序运行中出现什么错误都将只提示“HTTP500”错误。该方法唯一的缺点就是程序员编写的代码

60

··

2011.09·https://www.360docs.net/doc/1210868380.html,

技术探讨·TechnologyandStudy

出错时,服务器不给出详细的错误提示信息,会给程序员带来很大的不便。不过,服务器毕竟不是测试代码的地方,应坚持安全稳定第一,这样设置也无可厚非。

另一方面,不应赋予静态网站以“脚本和可执行”权限,而动态网站只赋予“纯脚本”权限,对于网站后台管理上传的文件执行权限设为“无”,这样就避免了攻击者在注入攻击成功后上传木马和恶意代码程序,那样整个Web服务器都会有被攻破的危险。

2)数据库服务器设置

数据库的用户角色应根据需要设置,以SQL Server为例,尽量不要使用系统管理员账号SA(system administrator)级别的权限,一般用户给予db_R eader和db_Writer权限,遇到有需要备份的用户最好新建一个用户。另一方面也要合理配置好数据库中表的操作权限、加密隐藏数据库文件、避免攻击者通过查找数据库相对路径下载数据库文件。

3)给服务器管理员的意见

互联网安全的问题说到底还是人的问题,因为人的素质高低和观念决定着互联网技术的高低和安危。作为服务器的管理员,担负着维护Web程序正常运行的重要责任。管理员应当定期查看日志,因为日志直接反应了一段时期内的相关操作或性能情况,是时间分析的第一手资料,应当确保Web应用程序所使用的SQL用户具有最小的必要权限。另外程序员应了解社会工程学相关知识,避免人为泄漏敏感信息。

1.7结果分析

在自行架设的网站进行测试的过程中,无论当攻击者以post、get、cookies方式向服务器提交非法字符时,系统都会立即提示发现攻击者的攻击行为,并将攻击时间、攻击者的ip等信息记录下来,而攻击者很难通过注入方式获取服务器的敏感信息,即使通过某个未发现的漏洞获得了管理员登录信息,也无法找到登录入口,这样我们就构筑起了较为完善的防御体系。该策略存在一个缺陷:程序员设计代码出现错误时,服务器无法给出提示信息,较为不便。

2.总结

本文从网络攻击行为中日益高发的Web服务器SQL注入攻击行为举例入手,解释了SQL注入攻击的概念、特点、原理,通过分析一个以ASP+SQL Server为架构的实例,讲解了注入攻击的主要过程。在此基础上,本文提出了“全过程安全策略”,该策略从Web应用程序代码编写阶段到Web服务器架设程序运行管理阶段,全过程地防范SQL注入攻击发生的可能。最后在测试的过程中,该策略取得了良好的防御效果。

参考文献

[1]张海平.网络信息安全[M].西安电子科技大学出版社,2006.

[2]2009年六大网络安全威胁:SQL注入攻击在列[EB/OL].http://www.cww.net.cn/zhuanti/html/2009/2/10/200921095084992.

htm.2009.

[3]王云,郭外萍,陈承欢.Web项目中的SQL注入问题研究与防范方法[J].计算机工程与设计,2010,31(5):976-978.[4]IBMInternetSecuritySystemsX-Force2009Mid-YearTrendandRiskReport[EB/OL].http://www.servicemanagementcenter.com/ExternalContent/IBMRBMS/SMRC/WHITEPAPER/68843/IBM-182G?óXFTR-H1-2009.pdf.2009.[5]SQLServer安全回顾[EB/OL].http://www.microsoft.com/china/ctc/Newsletter/04/ctc2.htm.2004.

[6]WhatisSQLInjection?[EB/OL].http://www.cgisecurity.com/questions/sql.shtml.2009.

[7]StephenKost.ANIntroductiontoSQLInjectionAttacksforOracleDevelopmers[EB/OL].http://www.integrigy.com/security-resources/whitepapers/Integrigy_Oracle_SQL_Injection_Attacks.pdf.2009.

[8]马春光,郭方方.防火墙、入侵检测与VPN[M].北京邮电大学出版社,2008.

[9]徐陋,姚国祥.SQL注入攻击全面预防办法及其应用[J].微计算机信息,2006,22(3):10-12.

[10]SQLInjectionAttackandDefense[EB/OL].http://www.securitydocs.com/library/3587.2009.

[11]杨义先.信息安全实验指导[M].国防工业出版社.2005.

[12]入侵的十个小技巧[EB/OL].http://wenku.baidu.com/view/7c2bad5177232f60ddcca147.html.2008.

[13]吴溥峰,张玉清.数据库安全综述[J].计算机工程,2006,32(12):85-88.

[14]王献冰,祝前臻.2009年我国网络安全回顾及2010年安全趋势分析报告[EB/OL].http://www.hackbase.com/2010/NetworkSecurity2009-2010.pdf.2009.

[15]冯登国,赵险峰.信息安全技术概论[M].电子工业出版社.2009.

【下转第64页】

61

··

信息安全与技术·2011.09

TechnologyandStudy·技术探讨

[16]黑客社会工程学攻击的八种常用伎俩[EB/OL].http://www.enet.com.cn/article/2009/0223/A20090223432212.shtml.

2009.

基金项目:国家自然科学基金可信软件重大研究计划(90718003);国家自然科学基金(61073042);北京邮电大学网络与交换技术国家重点实验室开放课题(SKLNST-2009-1-10).

Foundation Items:The National Natural Science Foundation of China(90718003)(61073042);State Key Laboratory on Network and Switching Technology(Beijing University of Posts and Telecommunications)(SKLNST-2009-1-10).

作者简介:

王希忠(1968-),男,2006年毕业于哈尔滨工程大学计算机应用技术专业,硕士研究生学历,现任黑龙江省电子信息产品监督检验院院长,正高级职称,黑龙江省“数据安全与计算机安全”专业带头人梯队带头人;主要研究方向:网络与信息安全、物联网、信息系统风险评估等。

这层面上讲,更多的是一种机遇。在云安全方面,运营商正在做,并需要继续加强的应该在以下几点。

1)通过风险评估,建立共有云和私有云。云服务提供商应根据自己的安全服务等级,协助用户对自己的数据和应用进行风险平估,根据重要性划分,向用户提供相应的安全服务等级。

2)进一步集成数据加密、VPN、身份认证、安全存储等综合安全技术手段,解决云计算底层技术架构安全、虚拟化安全、分布式计算安全、基础设施安全,保证云计算的可用性、云计算系统稳定性及服务连续性、用户信息安全。构建面向云计算应用的纵深安全防御体系。

3)建立可信云,加强安全认证。通过可信算法建立云架构从底层到顶层的可信任关系,最终形成可信任云。并采用多种认证方式相结合的方式,防止用户信息的外漏。

4)加强运营管理,采取分级控制和流程化管理的方法。完善安全审计及溯源机制。规范内部员工,健全内部机制,提高管理力度。

5)借助自身优势,建立特色的云安全服务,通过平台运营与控制,保持平台的生命力,通过循序渐进的开放原则,稳步推进云安全的发展;并基于不同的地域特点与信息技术产业结构,加强在云安全方面的合作,发展良好的合作伙伴群体,制订合理的安全服务等级协议。

5.总结

云计算的优势不可忽视,发展势不可挡,但安全性和可靠性是横亘在云计算发展道路上的一个鸿沟。云安全技术推出的时间不长,而且网络威胁是动态变化的,所以安全技术永远都处于不断研发、完善和前进的过程中。作为最具潜力的云服务的提供商,电信运营商应该及时准确的消化云计算的概念,把

握机遇,推动国家、行业以及企业云安全标准的建立,重视云安全对其业务推广以及客户满意度,从云平台的建设初期就开始考虑安全体系的跟进。只有这样,才能推动云服务成为运营商摆脱管道提供商的利器。

参考文献

[1]张健.全球云计算安全研究综述[J].电信技术,2010,9:15-18.

[2]带你认识云计算和全新一代云安全2.0技术.http://www.chinaz.com/News/IT/0ZO05632009.html.

[3]党卫红.云计算的安全防护策略分析与研究[J].读与写(教育教学刊),2010,(05).

作者简介:

薄明霞,女,北京邮电大学毕业,博士学位,任职于中国电信北京研究院,高级工程师;主要研究领域网络安全防护及评估评测。

陈军,女,清华大学,工学博士,中国电信股份有限公司北京研究院,高级工程师,超过10年电信网络与系统研究经验,对电信运营商的网络运行、运维体系、维护管理以及系统开发、项目管理具有深入的了解;主要研究及关注领域:网络与信息安全防护技术与测评、网络安全防护标准体系、网络应急恢复技术研究等、

王渭清,男,香港大学,计算机科学硕士学位,目前供职于中国电信北京研究院;主要从事中国电信网络安全工作,承担中国电信网络安全多项技术规范的编制、网络安全验收测试、网络安全评估评测等多项网络安全工作。

陈伟,女,北京交通大学,通信网络专业,研究生。

【上接第61页】

64

··

2011.09·https://www.360docs.net/doc/1210868380.html,

SQL注入攻击的种类和防范手段--IT专家网

观察近来的一些安全事件及其后果,安全专家们已经得到一个结论,这些威胁主要是通过SQL注入造成的。虽然前面有许多文章讨论了SQL注入,但今天所讨论的内容也许可帮助你检查自己的服务器,并采取相应防范措施。 SQL注入攻击的种类 知彼知己,方可取胜。首先要清楚SQL注入攻击有哪些种类。 1.没有正确过滤转义字符 在用户的输入没有为转义字符过滤时,就会发生这种形式的注入式攻击,它会被传递给一个SQL语句。这样就会导致应用程序的终端用户对数据库上的语句实施操纵。比方说,下面的这行代码就会演示这种漏洞: statement := "SELECT * FROM users WHERE name = '" + userName + "';" 这种代码的设计目的是将一个特定的用户从其用户表中取出,但是,如果用户名被一个恶意的用户用一种特定的方式伪造,这个语句所执行的操作可能就不仅仅是代码的作者所期望的那样了。例如,将用户名变量(即username)设置为:a' or 't'='t,此时原始语句发生了变化:SELECT * FROM users WHERE name = 'a' OR 't'='t'; 如果这种代码被用于一个认证过程,那么这个例子就能够强迫选择一个合法的用户名,因为赋值't'='t永远是正确的。 在一些SQL服务器上,如在SQL Server中,任何一个SQL命令都可以通过这种方法被注入,包括执行多个语句。下面语句中的username的值将会导致删除“users”表,又可以从“data”表中选择所有的数据(实际上就是透露了每一个用户的信息)。 a';DROP TABLE users; SELECT * FROM data WHERE name LIKE '% 这就将最终的SQL语句变成下面这个样子: SELECT * FROM users WHERE name = 'a';DROP TABLE users; SELECT * FROM DATA WHERE name LIKE '%'; 其它的SQL执行不会将执行同样查询中的多个命令作为一项安全措施。这会防止攻击者注入完全独立的查询,不过却不会阻止攻击者修改查询。 2.Incorrect type handling 如果一个用户提供的字段并非一个强类型,或者没有实施类型强制,就会发生这种形式的攻击。当在一个SQL语句中使用一个数字字段时,如果程序员没有检查用户输入的合法性(是否为数字型)就会发生这种攻击。例如: statement := "SELECT * FROM data WHERE id = " + a_variable + ";" 从这个语句可以看出,作者希望a_variable是一个与“id”字段有关的数字。不过,如果终端用户选择一个字符串,就绕过了对转义字符的需要。例如,将a_variable设置为:1;DROP TABLE users,它会将“users”表从数据库中删除,SQL语句变成: SELECT * FROM DAT A WHERE id = 1;DROP TABLE users;

sql注入漏洞测试指南

sql注入漏洞测试指南 一、s ql注入的定义 一般是指在存在SQL注入漏洞的web应用上,攻击者将恶意构造的SQL语句通过web应用的输入点注入到后端数据库中 执行,以达到恶意操作数据库数据的目的。 SQL注入是通过正常的web应用服务器端口进行的,表面上与正常的数据请求没什么区别,如果不对这类恶意构造的SQL 语句进行防御的话,数据库很可能会因为SQL注入漏洞的存在 导致数据库中的信息受到威胁,比如数据被删除,挂马,留后 门,甚至被进一步利用而拿到操作系统的管理员权限。 二、s ql注入攻击是如何发生的 无论是内网环境还是外网环境(互联网),B/S模式架构的web应用(以下指网站)都直接或者间接地受到各种类型的web 攻击。对于后端数据库来说,以SQL注入带来的危害最为普遍, 由于网站服务端语言自身的缺陷与程序员编写代码的安全意识 不足导致了攻击者可以将恶意SQL语句注入到正常的数据库操 作指令上,从而在数据库中被解析执行。 注入之前需要找到网站的各类与数据库形成交互的输入点。 通常的一个网站的输入点包括: 表单提交,主要是POST请求,也包括GET请求等;

URL参数提交,GET请求; Cookie参数提交; HTTP请求头部的一些可修改的值,比如Referer、User_Agent等,cookie也是存在于HTTP请求头中; 一些边缘的输入点,比如mp3文件的一些文件信息等; 其实只要服务端从客户端直接或间接获取到数据这一过程都是一次输入过程,无论直接或间接,输入的数据都应该默认认为是不安全的。 上面的各类输入点,只要任何一点存在过滤不严,过滤缺陷等问题,都有可能发生SQL注入攻击。很多时候SQL注入的过程都是由工具完成的,甚至包括大批量注入工具的使用。三、s ql注入举例 假设DB中存在如下数据: +----+---------+----------+ | id | uid | password | +----+---------+----------+ | 1 | test | abc | | 3 | user | abc | | 5 | user2| abc | | 6 | admin | abc | +----+---------+----------+

web技术应用基础应用复习资料

填空题 1.JSP把Java作为默认的脚本语言. 2.HTTP的中文含义是超文本传输协议,它的作用是用于传输超文本标记语言编写的文件。 3.网站一般分为三层,分别是用户界面交互层,应用程序层,数据库层。 4.Servlet的生命周期可以分为4个阶段:载入,初始化,执行,删除(销毁。 5.在JSP文件中使用〈!————〉对HTML文本进行注释,使用〈%————%〉符号对JSP语句进行注释。 6.JSP页面在使用Jag标记来调用一个标签文件之前,必须使用Taglib指令标记引入该Web服务目录下的标记库。 7.在JSP中当执行了查询结果保存在Resultset对象中。 8.在JSP中,连接数据库的方式通常有两种:一种是通过JDBC驱动程序连接;另一种是通过JDBC-ODBC桥连接。 9.HTML是超文本标记语言,作用是WWW页面内容的格式进行说明。在HTML中加入CSS的方法主要有嵌入式样式表,内联式样式表,外联式样式表。 10.Request对象的作用是表示客户端对网页的请求,并使用HTTP协议处理客户端的请求,一个常用的方法是getParameter();其作用为设置作为响应生成内容的类型和字符编码。 11.Reponse对象的作用是处理jsp生成的响应发送给客户端: setContentType(),其作用为设置作为响应生成内部的类型和字符编码。 12.JSP中的五个常见内建对象是out: application: request:reponse:session 13.Servlet中的4个常用方法分别是init():doGet():doPost():destor() 14.在JSP页面中显示用户信息的两种方法是out.println()和〈%= %〉 15.Servlet中实现页面跳转的两种方法是response.sendRedirect()和request.getRequestDispatcher().forward() 16.JSP开发网站的两种模式分为Jsp+javabean和jsp+javabean+servlet 17.一个JSP页面可由5种元素组合而成,分别是普通的HTML.标记,JSP标记,JAVA程序片,JAVA表达式和变量和方法的声明。 18.JavaBean有4个scope,分别page,request和 application,request,sussion. 19.内置对象session的setAttribute()方法可将数据存入session, getAttribute()方法可从session中将数据取出。 1 / 13 20.MVC将应用程序分为3个核心模块,分别是模型,视图和控制器。 21.异常的处理,可在该方法的代码段中包含3类代码:try.catch和finally 22.Servlet的生命周期由三个方法控制,这三个方法分别为:init();service();和destroy(). 23.使用Statement对象的executeQuery()方法执行查询语句,使用executeUpdate()方法执行更新语句,使用execute()方法执行动态的未知操作。 24.JSP中使用reponse的sendRedirect()方法实现页面的跳转。 25.JSP的英文全称是Java Servet Page. 26.将JSP与JavaBean配合使用是通过JSP中的三个动作指令实现 的:jsp:useBean: jsp:getProperty:jsp:setProperty.

网络攻击机制和技术发展综述

网络攻击机制和技术发展综述 一、概述 在这个世界上,人类不断研究和发展新的信息安全机制和工程实践,为战胜计算机网络安全威胁付出了艰巨的努力。似乎如果计算机攻击手法不再翻新,关于信息安全的战争将很快结束。虽然,大多数地下组织研究的攻击手法都是惊人的相似,无非就是:蠕虫、后门、rootkits、DoS和sniffer等。但这些手段都体现了它们惊人的威力。到今年,情况愈演愈烈。这几类攻击手段的新变种,与去年前年出现的相比,更加智能化,攻击目标直指互联网基础协议和操作系统层次。从web程序的控制程序到内核级rootkits,黑客的攻击手法不断升级翻新,向用户的信息安全防范能力不断发起挑战。 (注:rootkits, 是一种攻击脚本、经修改的系统程序,或者成套攻击脚本和工具,用于在一个目标系统中非法获取系统的最高控制权限。) 在长期与信息安全专家的较量中,黑客对开发隐蔽的计算机网络攻击技术更加得心应手。同时,这些工具应用起来也越来越简单。以前很多命令行的攻击工具被人写成了GUI(图形界面)的内核级rootkit,将这些高度诡异的攻击武器武装到了那些热中于”玩脚本的菜鸟”手中,这些杀伤力很强的黑客工具,使”脚本菜鸟”们变得象令人敬畏的黑客。 当然,工具本身是不会危及系统安全的-坏事都是人干的。信息安全专业人员也使用和入侵者同样使用的扫描和监听工具,对系统安全做例行公事般地审计。在恶意用户使用前,那些能非法控制web程序的新的渗透测试工具,也被安全人员用来测试系统的漏洞。但是,还有很多的工具有它完全黑暗的一面,比如,蠕虫程序不断发展和传播,它只用来干坏事;反入侵检测工具和很多rootkits专门用来破坏系统的安全性。 本文将探讨一些黑客工具的独创性,以及它们令普通人惊讶的功能。这对帮助用户考虑采用新技术和传统措施来防范这些威胁有很重要的意义:在攻击者攻击来临之前,先检测和修补系统和软件漏洞。 二、Web应用程序:首选目标 日益增长的网络业务应用为脆弱的web应用提供了漏洞滋生的土壤。如银行、政府机构和在线商务企业都使用了web技术提供服务。这些机构往往自己开发整套的web应用程序(ASP、JSP和CGI等),而这些开发者由于没有获得过专业训练,导致这些自产软件漏洞百出。Web程序的开发者没有意识到,任何传递给浏览器的信息都可能被用户利用和操纵。不管用不用SSL(安全套接层),恶意用户可以查看、修改或者插入敏感信息(包括价格、会话跟踪信息甚至是脚本执行代码)。攻击者可以通过状态操纵攻击或者SQL代码嵌入等技术危及电子商务网站的安全。 所谓状态操纵攻击(state manipulation), 是指攻击者通过在URL中修改传递给浏览器的敏感信息,隐藏表格元素和cookies,达到非法访问的目的。如果一个安全意识松懈的web开发者,他把数据存储在会话ID中,而没有考虑到价格和余额等关键数据的完整性保护,则攻击者完全可以修改这些数据。再加上如果web程序相信由浏览器传递过来的数据,那么攻击者完全可以窃取用户帐号、修改价格或者修改帐户余额。 所谓SQL代码嵌入(SQL injection),是指攻击者在普通用户输入中插入数据库查询指令。这些问题相当多情况下是因为输入检验不严格和在错误的代码层中编码引起的,如对逗号”,”和分号”;”等。在这种情况下,攻击者可以对数据库进行查询、修改和删除等操作,在特定情况下,还可以执行系统指令。一般情况下,web网页上的用户名表单往往是这类攻击的入口。如果攻击者使用Proxy server执行这类操作,管理员将很难查到入侵者的来源。而要防止这类攻击,必须在自研软件开发程序上下手整治,形成良好的编程规范和代码检测机制,仅仅靠勤打补丁和安装防火墙是不够的。关于SQL Injection更多的详细信息,请参考:https://www.360docs.net/doc/1210868380.html,/article/db/2412.htm

五大著名免费SQL注入漏洞扫描工具

大量的现代企业采用Web应用程序与其客户无缝地连接到一起,但由于不正确的编码,造成了许多安全问题。Web应用程序中的漏洞可使黑客获取对敏感信息(如个人数据、登录信息等)的直接访问。 Web应用程序准许访问者提交数据,并可通过互联网从数据库中检索数据。而数据库是多数Web应用程序的心脏。数据库维持着Web应用程序将特定内容交给访问者的数据,Web应用程序在将信息交给客户、供应商时,也从数据库取得数据。 SQL注入攻击是最为常见的Web应用程序攻击技术,它会试图绕过SQL命令。在用户输入没有“净化”时,如果执行这种输入便会表现出一种SQL注入漏洞。 检查SQL注入漏洞主要涉及到两方面,一是审计用户的Web应用程序,二是通过使用自动化的SQL注入扫描器执行审记的最佳方法。在此,笔者罗列了一些对Web应用程序开发人员和专业的安全审计人员有价值的SQL注入扫描程序。 一、SQLIer SQLIer可以找到网站上一个有SQL注入漏洞的URL,并根据有关信息来生成利用SQL注入漏洞,但它不要求用户的交互。通过这种方法,它可以生成一个UNION SELECT查询,进而可以强力攻击数据库口令。这个程序在利用漏洞时并不使用引号,这意味着它可适应多种网站。 SQLIer通过“true/false”SQL注入漏洞强力口令。借助于“true/false” SQL注入漏洞强力口令,用户是无法从数据库查询数据的,只能查询一个可返回“true”、“false”值的语句。 据统计,一个八个字符的口令(包括十进制ASCII代码的任何字符)仅需要大约1分钟即可破解。 其使用语法如下,sqlier [选项] [URL] 。其选项如下: -c :[主机] 清除主机的漏洞利用信息 -s :[秒]在网页请求之间等待的秒数 -u:[用户名]从数据库中强力攻击的用户名,用逗号隔开。 -w:[选项]将[选项]交由wget 此外,此程序还支持猜测字段名,有如下几种选择: --table-names [表格名称]:可进行猜测的表格名称,用逗号隔开。 --user-fields[用户字段]:可进行猜测的用户名字段名称,用逗号隔开。 --pass-fields [口令字段]:可进行猜测的口令字段名称,用逗号隔开。 下面说一下其基本用法: 例如,假设在下面的URL中有一个SQL注入漏洞: https://www.360docs.net/doc/1210868380.html,/sqlihole.php?id=1 我们运行下面这个命令: sqlier -s 10 https://www.360docs.net/doc/1210868380.html,/sqlihole.php?id=1从数据库中得到足够的信息,以利用其口令,其中的数字“10”表示要在每次查询之间等待10秒钟。 如果表格、用户名字段、口令字段名猜测得正确,那么漏洞利用程序会把用户名交付查询,准备从数据库中强力攻击口令。 sqlier -s 10 https://www.360docs.net/doc/1210868380.html, -u BCable,administrator,root,user4 然而,如果内建的字段/表格名称没有猜中正确的字段名,用户就可以执行: sqlier -s 10 https://www.360docs.net/doc/1210868380.html, --table-names [table_names] --user-fields [user_fields] --pass-fields [pass_fields]

SQL注入经典教程(珍藏版)

听说很多人想学SQL手工注入,但网上的资料都很不全,我在家没事就帮大家找了一些关于SQL手工注入经典的教程,希望能给大家带来帮助...... SQL 注入天书 - ASP 注入漏洞全接触收藏 引言 随着 B/S 模式应用开发的发展,使用这种模式编写应用程序的程序员也越来越多。但是由于这个行业的入门门槛不高,程序员的水平及经验也参差不齐,相当大一部分程序员在编写代码的时候,没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患。用户可以提交一段数据库查询代码,根据程序返回的结果,获得某些他想得知的数据,这就是所谓的 SQL Injection,即SQL注入。 SQL注入是从正常的 WWW 端口访问,而且表面看起来跟一般的 Web 页面访问没什么区别,所以目前市面的防火墙都不会对SQL注入发出警报,如果管理员没查看 IIS 日志的习惯,可能被入侵很长时间都不会发觉。 但是,SQL注入的手法相当灵活,在注入的时候会碰到很多意外的情况。能不能根据具体情况进行分析,构造巧妙的SQL语句,从而成功获取想要的数据,是高手与“菜鸟”的根本区别。 根据国情,国内的网站用 ASP+Access 或 SQLServer 的占 70% 以上, PHP+MySQ 占 20%,其他的不足 10%。在本文,我们从分入门、进阶至高级讲解一下 ASP 注入的方法及技巧,PHP 注入的文章由 NB 联盟的另一位朋友zwell 撰写,希望对安全工作者和程序员都有用处。了解 ASP 注入的朋友也请不要跳过入门篇,因为部分人对注入的基本判断方法还存在误区。大家准备好了吗? Lets Go... 入门篇 如果你以前没试过SQL注入的话,那么第一步先把 IE 菜单 =>工具 => Internet 选项 => 高级 => 显示友好 HTTP 错误信息前面的勾去掉。否则,不论服务器返回什么错误,IE都只显示为 HTTP 500 服务器错误,不能获得更多的提示信息。 第一节、SQL注入原理 以下我们从一个网站https://www.360docs.net/doc/1210868380.html,开始(注:本文发表前已征得该站站长同意,大部分都是真实数据)。 在网站首页上,有名为“ IE 不能打开新窗口的多种解决方法”的链接,地址为:https://www.360docs.net/doc/1210868380.html,/showdetail.asp?id=49,我们在这个地址后面加上单引号’,服务器会返回下面的错误提示: Microsoft JET Database Engine 错误 80040e14 字符串的语法错误在查询表达式 ID=49 中。 /showdetail.asp,行8

南信大Web技术与应用复习提纲

必须要熟悉的内容: 1.1节-1.4节中的基本概念 2.2节中常用的HTML标签的使用:标签的功能,属性,事件。 第6章的Page,Response,Request,Application和Session对象的功能,常用属性与方法。 7.5-7.8节提到的于https://www.360docs.net/doc/1210868380.html,相关的五大对象:Connection,Command,DataReader,DataAdapter和DataSet对象的功能,常用属性与方法。 程序填空题以教材的例题为主,不过不会完全一样,所以请熟悉例题中所提到的控件的常用方法与属性。 教材5.6.3-5.6.14的所有例题。 6.6,6.7和6.9节的有例题。 简答:(考四题) 1、请简述URL的概念与格式。 概念:统一资源定位符(uniform resource locator)是在Internet上确定某资源位置的标识符。资源指的是在Internet上访问的任何对象,如文件目录,文档,图像,视频,邮件地址等。 格式:<信息服务类型>://<信息资源地址>/<文件路径> 2、请简述Web的系统结构与工作原理。 系统结构: Web系统是客户——服务器模式: Web客户机:客户端的浏览器 Web服务器:多媒体资源存放的主机 中间件:可调用Web服务器中的数据库和其它应用程序,满足客户的各种应用要求。 工作原理: 用户点击超链接或在浏览器中输入地址后,此时浏览器将该信息转换成标准的HTTP请求发送给Web服务器。当Web服务器接收到HTTP请求后,根据请求内容查找所需信息资源,找到相应资源后,Web服务器将该部分资源通过标准的HTTP响应发送回浏览器。最后浏览器接收到响应后将HTML文档显示出来 3、Web服务端技术的主要任务是什么?有哪些常用的Web服务端技术? 主要任务:展现信息内容 技术:包括服务器、CGI、PHP、ASP、https://www.360docs.net/doc/1210868380.html,、Servlet和JSP技术 4、请简述https://www.360docs.net/doc/1210868380.html,在页面处理过程中的主要阶段。 1.页面初始化 页面被请求后,第一个阶段就是初始化页面的Page对象。初始化过程中服务器产生Page_Init事件,开发人员可以通过这个事件对页面中的控件,或程序中的变量进行初始化。

Web动态网页课程设计 题目及要求

Web动态网页课程设计 (总学时数:16课时) 一 Web动态网页 课程设计性质:本课程是一门计算机相关专业实践性环节。以HTML和CSS为基础,全面学习网页设计制作有关的知识,让学生通过实践理解Web基本工作机制,并使学生具有一般网页制作的能力。与此同时,通过对Web页制作技术和制作工具的学习,使学生对网页设计中所涉及的相关知识有一个全面的了解。 二课程设计目的 通过对ASP对象的使用,实现对WEB数据库的访问。通过本课程的学习,使学生全面了解网站建设与网页设计的基本概念、基本理论及业务运作模式,了解网站建设与网页设计的特点及工作过程,掌握网站的建立及网页设计制作的方法,能够完成一般性网站的建设。同时学会Web数据库系统开发的基本方法与过程并能够实现B/S结构的数据库管理系统。 三课程设计地点 公共基础实验室3(A504) 四课程设计内容 本次课程设计题目方案如下:

题目1:基于Web的实验室信息管理系统 题目2:网络商店(见web程序设计课本案例) 题目3:学生自拟(需经过教师审核) 内容要求: (1)掌握Web网页常用的开发工具Deamweaver或.Net的使用; (2)学会IIS的配置,或者netbox的安装与设置; (3)学会Html、CSS、Javascript、VBscript或C#的简单开发和应用 (4)学会B/S模式下,asp与数据库的连接,建议采用Access 数据库。动态新闻管理系统。在系统中,必须完成文章的添加,删除、修改、文章内容显示、题目列表显示 五课程设计时间安排 第一周 安排计划 第二周 数据库的设计 第三周 完成HTML静态页面和 CSS设计; 第四周开始至第六周 开始JavaScript、Javascript、VBscript或C#的程序代码设计

SQL注入原理及解决办法

SQL注入原理及解决办法 SQL注入就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。对于很多网站都有用户提交表单的端口,提交的数据插入MySQL数据库中,就有可能发生SQL注入安全问题,那么,如何防止SQL注入呢? 针对SQL注入安全问题的预防,需时刻认定用户输入的数据是不安全的,并对用户输入的数据进行过滤处理,对不同的字段进行条件限制,符合条件的可以写入数据库,不符合条件的进行数据过滤处理! 防止SQL注入,需要注意以下几点: 1. 永远不要信任用户的输入。对用户的输入进行校验,可以通过正则表达式,或限制长度;对单引号和双"-"进行转换等。 2. 永远不要使用动态拼装sql,可以使用参数化的sql或者直接使用存储过程进行数据查询存取。 3. 永远不要使用管理员权限的数据库连接,为每个应用使用单独的权限有限的数据库连接。 4. 不要把机密信息直接存放,加密或者hash掉密码和敏感的信息。 5. 应用的异常信息应该给出尽可能少的提示,最好使用自定义的错误信息对原始错误信息进行包装 6. sql注入的检测方法一般采取辅助软件或网站平台来检测,软件一般采用sql注入检测工具jsky,网站平台就有亿思网站安全平台检测工具。MDCSOFT SCAN等。采用MDCSOFT-IPS可以有效的防御SQL注入,XSS攻击等。

防止SQL注入之转义特殊输入字符 在脚本语言中,提供了可以对用户输入的数据进行转义的函数,如PHP的MySQL扩展提供了mysqli_real_escape_string()函数来转义特殊的输入字符,从而来防止SQL注入。 if (get_magic_quotes_gpc()) { $name = stripslashes($name); } $name = mysqli_real_escape_string($conn, $name); mysqli_query($conn, "SELECT * FROM users WHERE name='{$name}'"); 以上是防止SQL注入的常用思路和方法,具体的做法还需要根据实际问题进行设定,感兴趣的可以深入学习!

web技术应用基础应用复习

w e b技术应用基础应用 复习 文档编制序号:[KK8UY-LL9IO69-TTO6M3-MTOL89-FTT688]

填空题 1.JSP把Java作为默认的脚本语言. 2.HTTP的中文含义是超文本传输协议,它的作用是用于传输超文本标记语言 编写的文件。 3.网站一般分为三层,分别是用户界面交互层,应用程序层,数据库层。 4.Servlet的生命周期可以分为4个阶段:载入,初始化,执行,删除(销 毁。 5.在JSP文件中使用〈!————〉对HTML文本进行注释,使用〈%———— %〉符号对JSP语句进行注释。 6.JSP页面在使用Jag标记来调用一个标签文件之前,必须使用Taglib指令 标记引入该Web服务目录下的标记库。 7.在JSP中当执行了查询结果保存在Resultset对象中。 8.在JSP中,连接数据库的方式通常有两种:一种是通过JDBC驱动程序连 接;另一种是通过JDBC-ODBC桥连接。 9.HTML是超文本标记语言,作用是WWW页面内容的格式进行说明。在HTML中 加入CSS的方法主要有嵌入式样式表,内联式样式表,外联式样式表。 10.Request对象的作用是表示客户端对网页的请求,并使用HTTP协议处理 客户端的请求,一个常用的方法是getParameter();其作用为设置作为响应生成内容的类型和字符编码。 11.Reponse对象的作用是处理jsp生成的响应发送给客户端: setContentType(),其作用为设置作为响应生成内部的类型和字符编码。 12.JSP中的五个常见内建对象是out: application: request:reponse:session 13.Servlet中的4个常用方法分别是init():doGet():doPost():destor() 14.在JSP页面中显示用户信息的两种方法是()和〈%= %〉 15.Servlet中实现页面跳转的两种方法是()和().forward() 16.JSP开发网站的两种模式分为Jsp+javabean和jsp+javabean+servlet 17.一个JSP页面可由5种元素组合而成,分别是普通的HTML.标记,JSP标 记,JAVA程序片,JAVA表达式和变量和方法的声明。

SQL注入攻击实验报告

实验报告 (实验名称:SQL注入攻击)

一、实验目的 通过SQL注入攻击,掌握网站的工作机制,认识到SQL注入攻击的防范措施,加强对Web攻击的防范。 二、实验环境 描述实验开展所基于的网络环境,给出网络拓扑、IP地址、web服务器、客户机等信息。 宿主机(客户机):操作系统为Windows 10,IP为192.168.18.11,在主机上安装虚拟化软件Vmware Player,在此基础上创建虚拟机并安装操作系统,进行网络配置,采用环回适配器,桥接模式,实现宿主机与虚拟机之间的网络通信,虚拟机(Web服务器):操作系统为Windows XP,IP为192.168.18.9, 本实验利用windows 的iis 服务搭建了一个有SQL 注入漏洞的网站“ASP 新闻发布系统”,以该网站为目标,对其实施SQL 注入攻击。 本实验所需工具如下: IIS 是Internet Information Server 的缩写,是微软提供的Internet 服务器软件,包括Web、等服务器,也是目前常用的服务器软件。版本不限。 “啊D”注入工具:对“MSSQL 显错模式”、“MSSQL 不显错模式”、“Access”等数据库都有很好的注入检测能力,内集“跨库查询”、“注入点扫描”、“管理入口检测”、“目录查看”等等于一身的注入工具包。 “ASP 新闻发布系统”Ok3w v4.6 源码。 三、实验内容 (一)配置实验环境, 首先选择网络适配器,安装环回适配器,在主机上安装Vmware Player,成功启动虚拟机。接着配置宿主机和虚拟机的IP,如图 要注意的是,配置主机上的IP时,应该选择VMnet8,并且注意勾取Bridge

WEB安全编程技术规范(V1.0)

1.范围 本规范从应用开发安全管理要求出发,给出了WEB编码安全的具体要求。供浙江公司IT系统内部和厂商使用,适用于省市公司IT系统项目建设WEB工作。 本规范明确定义了JA V A、PHP应用开发中和WEB编码安全相关的技术细节。 与JA V A编码安全相关的内容包括:跨站脚本攻击及解决方法、SQL注入及解决方法、恶意文件执行及解决方法、不安全的直接对象引用及解决方法、跨站请求伪造及解决方法、信息泄露和错误处理不当及解决方法、残缺的认证和会话管理及解决方法、不安全的加密存储及解决方法、不安全的通信及解决方法、限制URL 访问实效解决方法。 与PHP编码安全相关的内容包括:变量滥用及解决方法、文件打开漏洞及解决方法、文件包含漏洞及解决方法、文件上传漏洞及解决方法、命令执行漏洞及解决方法、变量类型缺陷及解决方法、警告及错误信息处理解决方法、PHP与MYSQL 组合的SQL注入解决方法、跨站脚本解决方法。 2.1.规范概述 Web应用程序为结构设计人员、设计人员和开发人员提出一系列复杂的安全问题。最安全、最有能力抵御攻击的Web应用程序是那些应用安全思想构建的应用程序。 在设计初始阶段,应该使用可靠的体系结构和设计方法,同时要结合考虑程序部署以及企业的安全策略。如果不能做到这一点,将导致在现有基础结构上部署应用程序时,要不可避免地危及安全性。 本规范提供一系列安全的体系结构和设计指南,并按照常见的应用程序漏洞类别进行组织。这些指南是Web应用程序安全的重要方面,并且是经常发生错误的领域。

2.实现目标 使用本规范可以实现: 1.确定安全Web应用程序的重要体系结构和设计问题。 2.设计时考虑重要部署问题。 3.制定能增强Web应用程序输入验证的策略。 4.设计安全的身份验证和会话管理机制。 5.选择适当的授权模型。 6.实现有效的帐户管理方法,并保护用户会话。 7.对隐私、认可、防止篡改和身份验证信息进行加密。 8.防止参数操作。 9.设计审核和记录策略。 3.安全编码原则 1.程序只实现你指定的功能 2.永不要信任用户输入,对用户输入数据做有效性检查 3.必须考虑意外情况并进行处理 4.不要试图在发现错误之后继续执行 5.尽可能使用安全函数进行编程 6.小心、认真、细致地编程 4.安全背景知识 本规范主要提供设计应用程序时应该遵循的一些指南和原则。为充分理解本规范内容,请:了解应用程序将会受到的威胁,以确保通过程序设计解决这些问题。解需要考虑的威胁。在程序设计阶段应该考虑到这些威胁。 在应用程序易受攻击的重要环节应用系统的方法。将重点放在程序部署、输入验证、身份验证和授权、加密及数据敏感度、配臵、会话、异常管理以及适当的审核和记录策略上,以确保应用程序具有责任性。

如何防范SQL注入漏洞

如何防范SQL注入漏洞,下面给出4个函数,足够你抵挡一切SQL注入漏洞!读懂代码,你就能融会贯通。 注意要对所有的request对象进行过滤:包括 request.cookie, request.Server Variables 等等容易被忽视的对象: function killn(byval s1) '过滤数值型参数 if not isnumeric(s1) then killn=0 else if s1<0 or s1>2147483647 then killn=0 else killn=clng(s1) end if end if end function function killc(byval s1) 过滤货币型参数 if not isnumeric(s1) then killc=0 else killc=formatnumber(s1,2,-1,0,0) end if end function function killw(byval s1) '过滤字符型参数 if len(s1)=0 then killw="" else killw=trim(replace(s1,"'","")) end if end function function killbad(byval s1) 过滤所有危险字符,包括跨站脚本 If len(s1) = 0 then killbad="" else killbad = trim(replace(replace(replace(replace (replace(replace(replace(replace(s1,Chr(10), "
"), Chr(34), """), ">", ">"), "<", "<"), "&", "&"), chr(39),"'"),chr(32)," "),chr(13),""))

数据库SQL注入分类及防护思路数据库SQL注入分类及防护思路

数据库SQL注入分类及防护思路 作者:安华金和思成 一. 背景 数据库凭借其强大的数据存储能力和卓越的数据处理性能,在各行各业的信息化建设中发挥着关键的作用。随着数据库在各行业的大规模应用,数据泄露事件也频繁发生,这就使数据库安全问题也日益凸显,逐渐变成用户越来越担心的问题。虽然数据库厂商已经做了许多有效的措施来尽量解决数据库存在的安全问题,但至今为止数据库的安全漏洞仍然不断增加。下图为近5年数据库漏洞数量图。 在数据库漏洞中最为常见的漏洞类型是SQL注入漏洞。安华金和数据库攻防实验室结合多年的实践结果总结出了数据库注入的分类分享给大家,以便大家对SQL注入型漏洞有一个更加全面的了解。 SQL注入漏洞不仅出现在WEB端,也出现在数据库的自定义或标准库的存储过程、函数、触发器中。数据库自身的SQL注入漏洞比WEB端的注入漏洞对数据库的威胁性更大。本文对SQL注入的分类是从数据库的角度来划分,不考虑WEB端的角度,这两者在分类上有着不同的角度。 首先在解释不同的数据库SQL注入漏洞之前先简要说明一下数据库攻击者能够进行SQL 注入的主要原理:SQL注入漏洞是用户在输入中混入了程序命令。最直接的例子就是攻击者

在正常的Web 页面中把自己的SQL 代码通过用户输入传输到相应的应用程序中,从而执行 一些非授权的SQL 代码,以达到修改、窃取或者破坏数据库信息的目的。SQL 注入攻击甚至可以帮组攻击者绕过用户认证机制,使其可以完全的操控远程服务器上的数据库。如果应用 程序使用一些用户输入的数据来构造动态的SQL语句去访问数据库,将可能遭受到SQL 注入攻击。同样的如果在代码中使用了存储过程,并且这些存储过程缺乏对用户输入的合理限 制也很容易发生SQL 注入。 二. SQL注入分类 2.1 注入途径分类 SQL注入漏洞按照注入的物理途径可以分成两大类:通过WEB端对数据库进行注入攻 击和直接访问数据库进行注入攻击。 直接访问数据库进行注入攻击是以数据库用户的身份直接连接数据库进行SQL注入攻击。在这种攻击方式中,攻击者可以通过SQL注入来执行SQL语句从而提高用户权限或者越权 执行。而那些在PL/SQL程序中在给用户授权的时候没有使用authid current_user进行定义 的存储过程、函数、触发器、程序块将更容易受到SQL注入攻击。 通过WEB应用程序的用户对数据库进行连接并进行SQL注入攻击。在这种类型的SQL 注入攻击中,攻击者多采用拼接语句的方法来改变查询的内容。获取该账号权限下的全部信息。

921229-信息系统安全与对抗实践-4. Web攻击技术(下)

信息系统安全与对抗实践 Web 攻击技术(下)

内容提要 ?因设置或设计上的缺陷引发的安全漏洞 ?因会话管理疏忽引发的安全漏洞 ?其他安全漏洞 2

因设置或设计上的缺陷引发的安全漏洞 ?强制浏览(Forced Browsing) -指从安置在Web服务器的公开目录下的文件中,浏览那些原本非自愿公开的文件。 -造成的危害 ?泄露顾客的个人信息等重要情报 ?泄露原本需要具有访问权限的用户才可查阅的内容 ?泄露未连接到外界的文件 -案例 ?Apache配置中的Indexes选项会列举目录下的文件和子目录 3

因设置或设计上的缺陷引发的安全漏洞 ?不正确的错误消息处理(Error Handling Vulnerability) -指Web应用的错误信息内包含对攻击者有用的信息,包括Web应用抛出的错误信息和数据库等系统抛出的错误信息等。Web应用不必在用户的浏览画面上展现详细的错误信息,对攻击者来说,详细的错误信息有可能给他们的下一次攻击给予提示。 -案例 ?Web应用抛出的详细错误。(注册、登录) ?数据库等系统抛出的详细错误。(语句执行出错时) ?脚本语言抛出的错误(PHP、Python、ASP、JSP等) 4

因设置或设计上的缺陷引发的安全漏洞 ?开放重定向(Open Redirect) -开发重定向是一种对指定的任意URL作为重定向跳转的功能。于此功能相关联的安全漏洞指,假如指定重定向URL到某个具有恶意的Web网站,那么用户就会被诱导至那个Web网站。 -造成的危害 ?可信度高的Web网站如果开放重定向功能,则很可能被攻击者选中并作 为钓鱼攻击的跳板。 ?可以利用此功能进行服务端请求伪造攻击(Server-Side Request Forgery), 达到探测和访问内网资源的目的。 5

921202-信息系统安全与对抗实践-9. sql注入漏洞(一)

信息系统安全与对抗实践 SQL 注入漏洞(一)

内容提要 ?SQL注入漏洞 -基本介绍 -基本原理 -攻击步骤 ?靶场搭建 -DVWA(综合型靶场) -Sqli-labs(SQL注入靶场) 2

3 ?SQL Injection ,即SQL 注入,是指攻击者通过注入恶意的SQL 命令,破坏SQL 查询语句的结构,从而达到执行恶意SQL 语句的目的。SQL 注入漏洞的危害是巨大的,常常会导致整个数据库被“脱裤”,尽管如此,SQL 注入仍是现在最常见的Web 漏洞之一。 ?原理 select *from user where username =‘$username ’,红色部分内容为用户可控的内容,如果我们尝试输入一个单引号(‘)。Sql 语句就变成了select *from user where username =’’’,前面两个单引号组成了一对,后面空出一个单引号不符合语法规则,所以产生报错。此时我们已经修改了原本SQL 语句的结构。 输入$username 参数的地方也叫做注入点,注入点可能存在于GET 参数内、POST 参数内、HTTP 头字段内等。SQL 注入漏洞

SQL注入漏洞 ?原理 如果我们输入’ or ‘1’=‘1,那么sql语句就会变成select * from user where username = ‘’or ‘1’=‘1’,此时该语句就等同于select * from user 。 ?实战 -绕过登录 select * from username = ‘$username’ and password =‘$password’ -方法 ?使用注释 ?闭合单引号 4

sql注入攻击详解 sql注入解决办法

前段时间,在很多博客和微博中暴漏出了12306铁道部网站的一些漏洞,作为这么大的一个项目,要说有漏洞也不是没可能,但其漏洞确是一些菜鸟级程序员才会犯的错误。其实sql注入漏洞就是一个。作为一个菜鸟小程序员,我对sql注入的东西了解的也不深入,所以抽出时间专门学习了一下。现在把学习成果分享给大家,希望可以帮助大家学习。下面我们就来看一下。 一、什么是sql注入呢? 所谓SQL注入,就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL 命令,比如先前的很多影视网站泄露VIP会员密码大多就是通过WEB 表单递交查询字符暴出的,这类表单特别容易受到SQL注入式攻击.当应用程序使用输入内容来构造动态sql语句以访问数据库时,会发生sql 注入攻击。如果代码使用存储过程,而这些存储过程作为包含未筛选的用户输入的字符串来传递,也会发生sql注入。黑客通过SQL注入攻击可以拿到网站数据库的访问权限,之后他们就可以拿到网站数据库中所有的数据,恶意的黑客可以通过SQL注入功能篡改数据库中的数据甚至会把数据库中的数据毁坏掉。做为网络开发者的你对这种黑客行为恨之入骨,当然也有必要了解一下SQL注入这种功能方式的原理并学会如何通过代码来保护自己的网站数据库 二、sql注入产生原因

sql注入攻击是利用是指利用设计上的漏洞,在目标服务器上运行Sql 语句以及进行其他方式的攻击,动态生成Sql语句时没有对用户输入的数据进行验证是Sql注入攻击得逞的主要原因。对于java数据库连接JDBC而言,SQL注入攻击只对Statement有效,对PreparedStatement 是无效的,这是因为PreparedStatement不允许在不同的插入时间改变查询的逻辑结构。 如验证用户是否存在的SQL语句为: 用户名'and pswd='密码 如果在用户名字段中输入: 'or 1=1或是在密码字段中输入:'or 1=1 将绕过验证,但这种手段只对只对Statement有效,对PreparedStatement 无效。相对Statement有以下优点: 1.防注入攻击 2.多次运行速度快 3.防止数据库缓冲区溢出 4.代码的可读性可维护性好 这四点使得PreparedStatement成为访问数据库的语句对象的首选,缺点是灵活性不够好,有些场合还是必须使用Statement。 三、sql注入原理 下面我们来说一下sql注入原理,以使读者对sql注入攻击有一个感性的认识,至于其他攻击,原理是一致的。

网站设计与Web应用开发技术(第二版)课后习题答案

各章习题参考答案 第1章习题参考答案 1. 答:Internet是一个宽泛的概念,WWW实际上Internet所提供的众多服务中的一项。由于很多人上网主要浏览网站,很多初学者容易混淆这两个概念。 2. 答:统一资源定位符(URL)用于定位某个资源,由于Internent的复杂性,其提供的服务及传输协议有很多种,为了能区分,URL中必须进行说明,此处的http就是为了说明该请求属于超文本传输协议;URL的概念比较宽泛,http只是其中的一种传输协议,也可能出现别的情况,比如ftp等。。而www则是所请求服务器的域名,有些服务器的域名中就不包含www。 3. 答:其实技术是没有好坏之分的,关键在于是否适合你所应用的环境以及你是否能掌握。一味的求新、求好是没有经验的开发者所采取的行动。我们不应该单纯追求技术的先进性,而要追求有效和实用,当你要实现一个方案时,要分析项目的性质及最终用户,然后再寻找能解决问题的最经济、最实用也能满足用户需要的手段。因为用户并不关心你采用多么先进的技术,用户关心的是可靠(Reliable)、快速(Rapid)、方便(Convenient)。 4. 答:可以根据上文提供的基本原则,进行区分。不过有些网站不能截然的划分成其中的某一种。平时上网时多观察,多思考,对于提高自己的能力有很大的帮助。 5. 略 第2章习题参考答案 1.答:主要包括以下几个步骤(1) 建立网站前的市场分析,(2) 建设网站目的及功能定位,(3) 网站的技术解决方案,(4) 网站内容规划,(5) 网页界面设计,(6) 网站测试,(7) 网站发布与推广,(8) 网站维护,(9) 网站建设日程表,(10) 费用明细。详细内容可参考本书 2.2部分。 2.答:可以简单的通过两个方式进行判断: (1) 查看“管理工具”下是否有“Internet信息服务(IIS)管理器”,通过查看可以获知;这个方法可以获知本机是否使用了IIS服务,且仅对Windows操作系统有效。 (2) 直接在浏览器中输入“http://127.0.0.1”,看是否能看到有关信息(若安装的Web 服务器所设置的端口不是默认的80,则此方法无效)。 (3) 在本机执行netstat –a命令,查看是否存在Web服务器。 Web服务器的安装方法请查看本书2.4部分。 3.答:一般来说,这样就可以使用了,不过使用默认的配置可能会在将来出现问题。因此,通常我们需要进一步对网站进行配置。根据实际需要,一般来说,网站的安全性配置和网站的性能配置是需要修改的。

相关文档
最新文档