若天明 发表于 2015-1-16 22:40:14

MSSQL编程:SQL INJECTION的SQL SERVER平安设置

Mysql的存储引擎接口定义良好。有兴趣的开发者可以通过阅读文档编写自己的存储引擎。server|平安


日前SQLINJECTION的打击测试愈演愈烈,良多年夜型的网站和论坛都接踵被注进。这些网站一样平常利用的多为SQLSERVER数据库,正由于云云,良多人入手下手嫌疑SQLSERVER的平安性。实在SQLSERVER2000已经由过程了美国当局的C2级平安认证-这是该行业所能具有的最高认证级别,以是利用SQLSERVER仍是相称的平安的。固然和ORCALE、DB2等仍是有差异,可是SQL

SERVER的易用性和普遍性仍是能成为我们持续利用下往的来由。那怎样才干使SQLSERVER的设置让人利用的宁神呢?
1.1.第一步
打上SQLSERVER最新的平安补钉,如今补钉已出到了SP3。下载地点:http://www.microsoft.com/sql/downloads/2000/sp3.asp。假如这一步都没有做好,那我们也没有持续下往的需要了。
1.2.第二步
修正默许的1433端口,而且将SQLSERVER埋没。如许能克制对试图列举收集上现有的SQLServer客户端所收回的播送做出呼应。别的,还必要在TCP/IP选择中将1433端口屏障失落,尽量的埋没你的SQLSERVER数据库。如许既便让打击创立了SQLSERVER的账号,也不克不及即刻利用查询剖析器远程上岸来举行下一步的打击。单从ASP,PHP等页面机关歹意语句的话,另有必要检察前往值的成绩,总比不上间接查询剖析器来得拖拉。以是我们起首要做到即便让他人注进了,也不克不及让打击者下一步做得别扭。修正办法:

企业办理器-->你的数据库组-->属性-->惯例-->收集设置-->TCP/IP-->属性,在这儿将你的默许端口举行修正,和SQLSERVER的埋没。
1.3.第三步
SQLINJECTION常常在WEBCODE中发生,而作为体系办理员大概数据库办理员,总不克不及经常的往看每段代码。即便经常看代码,也不克不及包管我们在下面的忽略。那怎样办?我们就要从数据库脚色动手,让数据库用户的权限分别到最低点。SQLSERVER的默许权限让人真的很头疼,权限年夜得十分的高,权限小的又甚么都做不了,SYSADMIN和DB_OWNER真是让人又爱又恨。打击者一但确认了网站存在SQLINJECTION毛病,一定有一步操纵步骤就是测试网站的SQLSERVER利用者具有多年夜的权限。一样平常城市借助

SELECTIS_SRVROLEMEMBER(sysadmin)

大概

SELECTIS_MEMBER(db_owner)

再大概

user=0

(让字符和数字举行对照,SQLSERVER就会提醒了毛病信息,从该信息中便可晓得一些敏感信息)等语句举行测试。固然另有其他的办法。在以后,假如网站的数据库利用者用的是SA权限,再加上确认了WEB所处在的相对路径,那末就宣布了你的网站的OVER。DB_OWNER权限也一样,假如确认了相对路径,那末有50%的时机能给你的呆板中上WEB体例的木马,如海阳等。以是这儿我们确认了一点,我们必需要创立自已的权限,让打击者找不着动手的中央。在这儿援用一个SQLSERVER联机匡助中的例子:

创立SQLServer数据库脚色的办法(企业办理器)

创立SQLServer数据库脚色

1.睁开服务器组,然后睁开服务器。

2.睁开"数据库"文件夹,然后睁开要在个中创立脚色的数据库。

3.右击"脚色",然后单击"新建数据库脚色"命令。

4.在"称号"框中输出新脚色的称号。

5.单击"增加"将成员增加到"尺度脚色"列表中,然后单击要增加的一个或多个用户。(可选)

只要选定命据库中的用户才干被增加到脚色中。



工具权限

处置数据或实行历程时必要称为工具权限的权限种别:

•SELECT、INSERT、UPDATE和DELETE语句权限,它们能够使用到全部表或视图中。

•SELECT和UPDATE语句权限,它们能够有选择性地使用到表或视图中的单个列上。

•SELECT权限,它们能够使用到用户界说函数。

•INSERT和DELETE语句权限,它们会影响整行,因而只能够使用到表或视图中,而不克不及使用到单个列上。

•EXECUTE语句权限,它们能够影响存储历程和函数。



语句权限

创立数据库或数据库中的项(如表或存储历程)所触及的举动请求另外一类称为语句权限的权限。比方,假如用户必需可以在数据库中创立表,则应当向该用户授与

CREATETABLE语句权限。语句权限(如CREATEDATABASE)合用于语句本身,而不合用于数据库中界说的特定工具。

语句权限有:

•BACKUPDATABASE

•BACKUPLOG

•CREATEDATABASE

•CREATEDEFAULT

•CREATEFUNCTION

•CREATEPROCEDURE

•CREATERULE

•CREATETABLE

•CREATEVIEW



表示性权限

表示性权限把持那些只能由预界说体系脚色的成员或数据库工具一切者实行的举动。比方,sysadmin。

流动服务器脚色成员主动承继在SQLServer安装中举行操纵或检察的全体权限。

数据库工具一切者另有表示性权限,能够对所具有的工具实行统统举动。比方,具有表的用户能够检察、增加或删除数据,变动表界说,或把持同意其他用户对表举行操纵的权限。

db_owner在数据库中有全体权限。

db_accessadmin能够增加或删除用户ID。

db_securityadmin能够办理全体权限、工具一切权、脚色和脚色成员资历。

db_ddladmin能够收回ALLDDL,但不克不及收回GRANT、REVOKE或

DENY语句。

db_backupoperator能够收回DBCC、CHECKPOINT和BACKUP语句。

db_datareader能够选择数据库内任何用户表中的一切数据。

db_datawriter能够变动数据库内任何用户表中的一切数据。

db_denydatareader不克不及选择数据库内任何用户表中的任何数据。

db_denydatawriter不克不及变动数据库内任何用户表中的任何数据。



在这儿把新建的数据库脚色的权限设置好,好比必要利用哪一个表、视图、存储历程等。然后把db_owner和db_securityadmin、db_backupoperator作废,不给打击者BACKUPDATABASE和CREATETABLE的时机,一但打击者具有这两个权限,那末你的网站就还处在非常伤害的形态。另有注重一下,在创立数据库账号时,万万不克不及对服务器脚色举行选择。
1.4.第四步
修正SQLSERVER内置存储历程。

SQLSERVER估量是为了安装大概别的方面,它内置了一批伤害的存储历程。能读到注册表信息,能写进注册表信息,能读磁盘共享信息等等……列位看到这儿,内心大概会在想,我的网站中有别的的代码,又不像查询剖析器那样能间接将了局输入。给你这个权限,也不克不及怎样,仍是看不到信息。假如列位如许想就年夜错特错了。提醒一下,假如打击者有CREATETABLE的权限,那末创立一个一时表,然后将信息INSERT到表中,然SELECT出来,接着跟数字举行对照,让SQLSERVER报错,那末了局就全出来了……以是我们要报着宁错杀,不放过的立场举行修补。

先来列出伤害的内置存储历程:

xp_cmdshell

xp_regaddmultistring

xp_regdeletekey

xp_regdeletevalue

xp_regenumkeys

xp_regenumvalues

xp_regread

xp_regremovemultistring

xp_regwrite



ActiveX主动剧本:



sp_OACreate

sp_OADestroy

sp_OAMethod

sp_OAGetProperty

sp_OASetProperty

sp_OAGetErrorInfo

sp_OAStop



以上各项全在我们封杀之列,比方xp_cmdshell屏障的办法为:

sp_dropextendedprocxp_cmdshell

假如必要的话,再用

sp_addextendedprocxp_cmdshell,xpsql70.dll

举行恢复。假如你不晓得xp_cmdshell利用的是哪一个.dll文件的话,可使用

sp_helpextendedprocxp_cmdshel

来检察xp_cmdshell利用的是哪一个静态连接库。别的,将xp_cmdshell屏障后,我们还必要做的步骤是将xpsql70.dll文件举行更名,以避免取得SA的打击者将它举行恢复。
1.5.结语
我们做到这儿,你的SQLSERVER就基础上平安了。可是信息仍是能一样的外泄。究竟SELECT我们是没法作废的,除非你的网站用的是HTML。SQLINJECTION的提防还必要我们这些程序员来注重,这才是治标之法。我们在初级设置篇再接着对SQLSERVER的平安做下一步的剖析。该篇文章假如有甚么讹夺,请人人多多包容。感谢……



别的保举一下,SQLINJECTION的测试工具NBSI,这是由NB同盟中小竹同道开辟,对SQL

INJECTION的注进有代表性的感化,别的一个就是小弟的NBWEBSHELL了。这些工具都能够到NB同盟网站举行下载。


为多种编程语言提供了API。这些编程语言包括C、C++、Python、Java、Perl、PHP、Eiffel、Ruby和Tcl等。

冷月葬花魂 发表于 2015-1-19 21:08:53

这一点很好的加强了profiler的功能。但是提到profiler提醒大家注意一点。windows2003要安装sp1补丁才能启动profiler。否则点击没有反应。

乐观 发表于 2015-1-28 10:43:49

作了些试验,发现使用CLR的存储过程或函数在达到一定的阀值的时候,系统性能会呈指数级下滑!这是非常危险的!只使用几个可能没有问题,当一旦大规模使用会造成严重的系统性能问题!

飘灵儿 发表于 2015-2-5 20:42:26

习惯敲命令行的朋友可能会爽一些。但是功能有限。适合机器跑不动SQLServerManagementStudio的朋友使用。

第二个灵魂 发表于 2015-3-3 22:04:46

对一张百万级别的表建游标,同时又没有什么过滤条件,取得游标效率是如果直接SQL查询百万条数据;如果再对每条记录做处理,耗时将更长。

山那边是海 发表于 2015-3-11 14:13:46

连做梦都在想页面结构是怎么样的,绝非虚言

只想知道 发表于 2015-3-18 19:11:19

还不是性能有问题!否则面向对象的数据库早就实现了!建议使用CLR的地方一般是和应用的复杂程度或操作系统环境有很高的耦合度的场景。如你想构建复杂的算法,并且用到了大量的指针和高级数据模型。

愤怒的大鸟 发表于 2015-3-26 13:00:11

多走走一此相关论坛,多看一些实例开发,多交流0经验,没什么的,我也是刚学没多久!加油
页: [1]
查看完整版本: MSSQL编程:SQL INJECTION的SQL SERVER平安设置