当前位置: 首页 > 编程日记 > 正文

SQLserver安全设置攻略

日前SQL INJECTION的攻击测试愈演愈烈,很多大型的网站和论坛都相继被注入。这些网站一般使用的多为SQLSERVER数据库,正因为如此,很多人开始怀疑SQL SERVER的安全性。其实SQL SERVER2000已经通过了美国政府的C2级安全认证-这是该行业所能拥有的最高认证级别,所以使用SQLSERVER还是相当的安全的。当然和 ORCAL、DB2等还是有差距,但是SQL
SERVER的易用性和广泛性还是能成为我们继续使用下去的理由。那怎么样才能使SQL SERVER的设置让人使用的放心呢?第一步肯定是打上SQLSERVER最新的安全补丁,现在补丁已经出到了SP3。下载地址:http: //www.microsoft.com/sql/downloads/2000/sp3.asp
。如果这一步都没有做好,那我们也没有继续下去的必要了。第二步是修改默认的1433端口,并且将SQL SERVER隐藏。这样能禁止对试图枚举网络上现有的 SQL Server
客户端所发出的广播作出响应。另外,还需要在TCP/IP筛选中将1433端口屏蔽掉,尽可能的隐藏你的SQLSERVER数据库。这样子一但让攻击创建了SQLSERVER的账号,也不能马上使用查询分析器远程登陆来进行下一步的攻击。单从ASP,PHP等页面构造恶意语句的话,还有需要查看返回值的问题,总比不上直接查询分析器来得利落。所以我们首先要做到即使让别人注入了,也不能让攻击者下一步做得顺当。修改方法:企业管理器
--> 你的数据库组 --> 属性 --> 常规 --> 网络配置 --> TCP/IP --> 属性
,在这儿将你的默认端口进行修改,和SQL SERVER的隐藏。第三步是很重要的一步,SQL INJECTION往往在WEBCODE中产生。而做为系统管理员或者数据库管理员,总不能常常的去看每一段代码。即使常常看代码,也不能保证我们在上面的疏忽。那怎么办?我们就要从数据库角色着手,让数据库用户的权限划分到最低点。SQLSERVER的默认权限让人真的很头疼,权限大得非常的高,权限小的又什么都做不了,SYSADMIN和db_owner真是让人又爱又恨。攻击者一但确认了网站存在SQLINJECTION漏洞,肯定有一步操作步骤就是测试网站的SQL SERVER使用者具有多大的权限。一般都会借助selectIS_SRVROLEMEMBER('sysadmin'),或者select IS_MEMBER('db_owner'),再或者用user= 0(让字符和数字进行比较,SQLSERVER就会提示了错误信息,从该信息中即可知道一些敏感信息)等语句进行测试。方法还有,我也不敢多说了。其一怕错,其二怕联盟中的人扁。在当前,如果网站的数据库使用者用的是SA权限,再加上确认了WEB所处在的绝对路径,那么就宣告了你的网站的OVER。 db_owner权限也一样,如果确认了绝对路径,那么有50%的机会能给你的机器中上WEB方式的木马,如海阳等。所以这儿我们确认了一点,我们必须要创建自已的权限,让攻击者找不着下嘴的地方。在这儿引用一个SQLSERVER联机帮助中的例子:创建 SQL Server 数据库角色的方法(企业管理器)
创建 SQL Server 数据库角色
1. 展开服务器组,然后展开服务器。
2. 展开"数据库"文件夹,然后展开要在其中创建角色的数据库。
3. 右击"角色",然后单击"新建数据库角色"命令。
4. 在"名称"框中输入新角色的名称。
5. 单击"添加"将成员添加到"标准角色"列表中,然后单击要添加的一个或多个用户。(可选)
只有选定数据库中的用户才能被添加到角色中。对象权限
处理数据或执行过程时需要称为对象权限的权限类别:
· select、insert、update 和 delete 语句权限,它们可以应用到整个表或视图中。
· select 和 update 语句权限,它们可以有选择性地应用到表或视图中的单个列上。
· select 权限,它们可以应用到用户定义函数。
· insert 和 delete 语句权限,它们会影响整行,因此只可以应用到表或视图中,而不能应用到单个列上。
· EXECUTE 语句权限,它们可以影响存储过程和函数。语句权限
创建数据库或数据库中的项(如表或存储过程)所涉及的活动要求另一类称为语句权限的权限。例如,如果用户必须能够在数据库中创建表,则应该向该用户授予
create TABLE 语句权限。语句权限(如 create DATABASE)适用于语句自身,而不适用于数据库中定义的特定对象。
语句权限有:
· BACKUP DATABASE
· BACKUP LOG
· create DATABASE
· create DEFAULT
· create FUNCTION
· create PROCEDURE
· create RULE
· create TABLE
· create VIEW暗示性权限
暗示性权限控制那些只能由预定义系统角色的成员或数据库对象所有者执行的活动。例如,sysadmin 固定服务器角色成员自动继承在 SQL
Server 安装中进行操作或查看的全部权限。
数据库对象所有者还有暗示性权限,可以对所拥有的对象执行一切活动。例如,拥有表的用户可以查看、添加或删除数据,更改表定义,或控制允许其他用户对表进行操作的权限。db_owner 在数据库中有全部权限。
db_accessadmin 可以添加或删除用户 ID。
db_securityadmin 可以管理全部权限、对象所有权、角色和角色成员资格。
db_ddladmin 可以发出 ALL DDL,但不能发出 GRANT、REVOKE 或 DENY 语句。
db_backupoperator 可以发出 DBCC、CHECKPOINT 和 BACKUP 语句。
db_datareader 可以选择数据库内任何用户表中的所有数据。
db_datawriter 可以更改数据库内任何用户表中的所有数据。
db_denydatareader 不能选择数据库内任何用户表中的任何数据。
db_denydatawriter 不能更改数据库内任何用户表中的任何数据。在这儿把新建的数据库角色的权限配置好,比如需要使用哪个表、视图、存储过程等。然后把Db_owner和 db_securityadmin、db_backupoperator取消,不给攻击者BACKUP
DATABASE和create
TABLE的机会,一但攻击者具有这两个权限,那么你的网站就还处在十分危险的状态。还有注意一下,在创建数据库账号时,千万不能对服务器角色进行选择。
第四步是修改SQL SERVER内置存储过程。SQLSERVER估计是为了安装或者其它方面,它内置了一批危险的存储过程。能读到注册表信息,能写入注册表信息,能读磁盘共享信息等等……各位看到这儿,心里可能会在想,我的网站中有其它的代码,又不像查询分析器那样能查接将结果输出。给你这个权限,又不能怎么样,还是看不到信息。如果各位这样想就大错特错了。提示一下,如果攻击者有createTABLE的权限,那么创建一个临时表,然后将信息insert到表中,然 select出来,接着跟数字进行比较,让SQLSERVER报错,那么结果就全出来了……所以我们要报着宁错杀,不放过的态度进行修补。先来列出危险的内置存储过程:
xp_cmdshell
xp_regaddmultistring
xp_regdeletekey
xp_regdeletevalue
xp_regenumkeys
xp_regenumvalues
xp_regread
xp_regremovemultistring
xp_regwriteActiveX自动脚本:sp_OAcreate
sp_OADestroy
sp_OAMethod
sp_OAGetProperty
sp_OASetProperty
sp_OAGetErrorInfo
sp_OAStop以上各项全在我们封杀之列,例如xp_cmdshell屏蔽的方法为:sp_dropextendedproc
'xp_cmdshell',如果需要的话,再用sp_addextendedproc 'xp_cmdshell',
'xpsql70.dll'进行恢复。如果你不知道xp_cmdshell使用的是哪个.dll文件的话,可以使用sp_helpextendedproc
xp_cmdshell来查看xp_cmdshell使用的是哪个动态联接库。另外,将xp_cmdshell屏蔽后,我们还需要做的步骤是将 xpsql70.dll文件进行改名,以防止获得SA的攻击者将它进行恢复。我们做到这儿,你的SQLSERVER就基本上安全了。但是信息还是能一样的外泄。毕竟select我们是无法取消的,除非你的网站用的是HTML。SQLINJECTION的防范还需要我们这些程序员来注意,这才是治本之法。我们在高级设置篇再接着对SQLSERVER的安全做下一步的分析。该篇文章如果有什么错漏,请大家多多包涵。谢谢……另外推荐一下,SQL INJECTION的测试工具NBSI2,这是由联盟中小竹同志开发,对SQLINJECTION的注入有代表性的作用,另外一个就是小弟的 NBWEBSHELL了。这些工具都可以到联盟网站进行下载NB联盟-jadesun(裤衩) QQ:280155
NB网站:54nb.com
SQL注入防御方法-程序员篇作者:NB联盟-小竹 SQL注入越来越多的被利用来入侵网站,部分WEB程序员也开始关注这方面的知识,但由于对入侵的方法一知半解,导致在过滤的时候漏掉某些字符,造成安全漏洞;或者是草木皆兵,把一些合法的用户请求都拒之门外,试想一下,当用户想输入个I'm
a boy的时候,却给你臭骂一顿,他还会愿意再上你的网站吗?下面,我从程序方面介绍一下SQL注入的防御方法,首先看这三句最简单SQL语句
1.SQL="select * from Users where UserID=" & Request("ID")
2.SQL="select * from Users where UserID='" & Request("ID") & "'"
3.SQL="select * from Users where UserName like '%" & Request("Name")
& "%'"第一句,参数是数字型,这个很明显。第二句,如果字段UserID是int型,就有些人分不清楚了。其实,区分第数字弄和字符型参数,只要看SQL语句参数两边有没有单引号即可,很明显,第一句没单引号,是数字型;第二第三句有单引号,是字符型。
对于数字型变量,传入的参数都会直接附加到SQL语句上执行,而因为参数是数字型,所以用isNumeric判断是很安全的,我曾经试过用之类试图断开参数,但结果都是失败。
对于字符型变量,传入的参数都是做为常量,比如你传1 and 1=1进去,SQL语句就是UserID=? and
1=1',在单引号界定范围里面的值永远都只是一个常量,要打破这个范围,唯一的字符就是界定的字符:单引号。所以,字符型变量只要过滤了'号就完全安全了,至于如何过滤,最好是把一个单引号替换成两个单引号,因为SQL语句里面规定,'常量'这样表示的常量里面,常量里面如果要有单引号,可以用两个单引号代替。这样,既可以保持用户输入的原貌,又可以保证程序的安全。
下面是两个函数,大家可以Copy过去直接调用就行了。'---------------------------------------------------------------
' NB联盟防注入函数 ReqNum / ReqStr
'---------------------------------------------------------------
Function ReqNum ( StrName )
ReqNum = Request ( StrName )
if Not isNumeric ( ReqNum ) then
Response.Write "参数必须为数字型!"
Response.End
End if
End FunctionFunction ReqStr ( StrName )
ReqStr = Replace ( Request(StrName), "'", "''" )
End Function
以上面三句SQL语句,说明一下调用方法:
1.SQL="select * from Users where UserID=" & ReqNum("ID")
2.SQL="select * from Users where UserID='" & ReqStr("ID") & "'"
3.SQL="select * from Users where UserName like '%" & ReqStr("Name")
& "%'" 重申一点:上面的方法无论对SQLServer库还是Access或是其它数据库,都是绝对适用、绝对安全,但注意一点,SQLServer的存储过程是个例外,该情况下要把单引号替换成四个单引号,以保安全。

相关文章:

undefined symbol: ap_log_rerror;apache2.4与weblogic点so文件

没法子啊;只能用 httpd-2.2.26 https://www.google.com.hk/#newwindow1&qundefinedsymbol:ap_log_rerror&safestrictundefined symbol: ap_log_rerror[rootlocalhost local]# vi apache2/conf/httpd.conf[rootlocalhost local]# ./apache2/bin/apachectl s…

10个Java 8 Lambda表达式经典示例

Java 8 刚于几周前发布,日期是2014年3月18日,这次开创性的发布在Java社区引发了不少讨论,并让大家感到激动。特性之一便是随同发布的lambda表 达式,它将允许我们将行为传到函数里。在Java 8之前,如果想将行为传入函数&…

Sql server 2005带来的分页便利

select threadid from (select threadid, ROW_NUMBER() OVER (order by stickydate) as Pos from cs_threads) as T where T.Pos > 100000 and T.Pos < 100030 如果里面的这个表cs_threads数据量超大&#xff0c;比如&#xff0c;几亿条记录&#xff0c;那这个方法应该是…

想学Python?快看看这个教程!收藏!

Python入门从哪开始&#xff0c;90%以上的书上都是这样讲的&#xff1a;先介绍 Python 的基本语法规则、list、dict、tuple 等数据结构&#xff0c;然后再介绍字符串处理和正则表达式&#xff0c;介绍文件等IO操作.... 就这样一点一点往下说。然而这种按部就班的学习方法&#…

Struts1.x系列教程(4):标签库概述与安装

Struts的整个视图层&#xff08;就是MVC模式中的View层&#xff09;是由Struts的定制标签&#xff08;或者称为定制动作&#xff09;和客户端代码(Javascript、HTML等)实现的。这些Struts标签被写在JSP页面中&#xff0c;用于生成客户端代码、进行逻辑判断等工作&#xff0c;使…

绿盟科技与CCF成立“鲲鹏”科研基金 计划发力5大领域资助16个项目

【51CTO.com原创稿件】2017年5月10日&#xff0c;由中国计算机学会(CCF)和北京神州绿盟信息安全科技股份有限公司(以下简称&#xff1a;绿盟科技)主办的2017 CCF-绿盟科技“鲲鹏”科研基金新闻发布会于北京隆重举行。双方共同宣布“鲲鹏”科研基金正式成立&#xff0c;该基金将…

修改SQL SERVER内置存储过程

SQLSERVER估计是为了安装或者其它方面&#xff0c;它内置了一批危险的存储过程。能读到注册表信息&#xff0c;能写入注册表信息&#xff0c;能读磁盘共享信息等等……各位看到这儿&#xff0c;心里可能会在想&#xff0c;我的网站中有其它的代码&#xff0c;又不像查询分析器那…

〖Linux〗使用Qt5.2.0开发Android的NDK应用程序

2013年12月11日&#xff0c;Qt发布了其新的Qt版本&#xff1a;Qt5.2.0&#xff1b; 利用这个新的版本&#xff0c;我们可以很轻松地制作出Android手机的NDK应用程序。 开发环境&#xff1a;Ubuntu13.10 x86_64 下载链接&#xff1a;http://download.qt-project.org/official_re…

基于 OpenCV 的面部关键点检测实战

【 编者按】这篇文章概述了用于构建面部关键点检测模型的技术&#xff0c;这些技术是Udacity的AI Nanodegree程序的一部分。作者 | 小白责编 | 欧阳姝黎概述在Udacity的AIND的最终项目中&#xff0c;目标是创建一个面部关键点检测模型。然后将此模型集成到完整的流水线中&#…

气温上升影响数据中心节能

也许一些公司都是你熟悉的名字。但你可能不知道的是&#xff0c;这样的公司拥有遍布美国的大型数据中心&#xff0c;包括北弗吉尼亚州。数据中心用于存储、备份和通信业务&#xff0c;使用了大量的电力&#xff0c;为IT设备供电&#xff0c;并保持其冷却其数据中心基础设施。 也…

如何将SQL Server表驻留内存和检测

将SQL Server数据表驻留内存是SQL Server提供的一项功能&#xff0c;在一般小型系统的开发过程中估计很少会涉及到。这里整理了相关文档资料&#xff0c;演示如何把SQL Server中一个表的所有数据都放入内存中&#xff0c;实现内存数据库&#xff0c;提高实时性。 1, DBCC PINTA…

C 一样快,Ruby 般丝滑的 Crystal 发布 1.0 版本,你看好吗?

整理 | 寇雪芹 头图 | 下载于视觉中国 出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09; 近日&#xff0c;编程语言 Crystal 发布了 1.0 版本。 Crystal 是一种通用的、面向对象的编程语言&#xff0c;其语法受到 Ruby 语言的启发&#xff0c;具有静态类型检查功能&am…

php in yii framework

为什么80%的码农都做不了架构师&#xff1f;>>> command line php yiic defined(STDIN) or define(STDIN, fopen(php://stdin, r));$_SERVER[argv](2013-12-30 22:44:10) 最近读这本书, 讲使用方法, 每章节各自独立, 配合些源码看(但不要细看, 会干扰进度, 浪费时…

selenium grid2 使用远程机器的浏览器

下载 selenium-server-standalone-3.4.0.jar包在selenium-server-standalone-3.4.0.jar包目录下面执行cmd 命令 java -jar selenium-server-standalone-3.4.0.jar -role hub 启用selenium grid hub&#xff0c; 默认端口 4444注册浏览器客户端&#xff0c;命令行执行&#xff…

Create a restful app with AngularJS/Grails(4)

为什么80%的码农都做不了架构师&#xff1f;>>> #Standalone AngularJS application In the real world applications, it is usually required to integrate the third party APIs into the project. Most of case, the third party service is provided as flexi…

无代码的时代真的来了吗?

所谓“无代码”&#xff0c;并不是不存在代码&#xff0c;无代码平台的开发&#xff0c;给开发者更大的挑战、更多 机会。所以&#xff0c;“无代码”不是解放程序员&#xff0c;而是给程序员提出了更高的要求、带来更大的挑战。作者 | 函子科技陆继恒&#xff0c;Jessica Tang…

实现自适应高度

天修改一个用Excel的报表,有一个数据格是跨两列,一般单格的数据格用自动换行就可以实现自适应高度,但是跨列是不行的.查找google良久,也没发现适合的办法,一阵头痛之后,突然有了灵感,于是马上做试验,还真的实现了.先写出来,如果有困于这个问题的朋友偶然路过,或许还能有一点用处…

分表分库之一:分布式数据库的常见用法

尽量减少事务边界 采用分库分表的方式将业务数据拆分后&#xff0c;如果每条SQL语句中都能带有分库分表键&#xff0c;分布式服务层对于SQL解析后都能精准地将这条SQL语句推送到该数据所在的数据库上执行&#xff0c;数据库将执行的结果再返回给分布式服务层&#xff0c;分布式…

打印自定义纸张大小

长江支流说的办法保留太多了,结果不行,很多类都是他在程序集里自定义的,源码又没公开 不过还是要感谢他的提示 今天和小陈搞了一天,他在国外的论坛上看到了一篇文章得到了启示,最后我们在凌晨3点终于把自定义纸张的代码给写出来了,看来必须用API,微软的.NET对打印的支持太菜了…

看完 50000 张专辑封面,AI 设计师开始疯狂输出

西班牙艺术家利用 StyleGAN2 打造了一个 AI 设计师&#xff0c;借助 50000 张图像自学成才&#xff0c;没想到培养一个印象派设计师这么简单。作者 | 三羊来源 | HyperAI超神经头图 | 网友整理抄袭事件的对比图也许是有些设计太经典出挑&#xff0c;总是让人情不自禁地模仿。日…

XenApp_XenDesktop_7.6实战篇之八:申请及导入许可证

1. 申请许可证Citrix XenApp_XenDesktop7.6和XenServer 6.5申请许可证的步骤是一致的&#xff0c;由于之前我已经申请过XenApp_XenDesktop的许可证&#xff0c;本次以XenServer6.5的许可证申请为例。1.1 在申请试用或购买Citrix产品时&#xff0c;收到相应的邮件&#xff0c;其…

使用Windows操作系统的13个窍门

Windows操作系统的13个使用窍门&#xff0c;很适用。 1.删除Windows下不让删除的文件 有时想删除某个文件&#xff0c;系统会告诉无法删除&#xff0c;换到DOS下或是安全模式虽然可以删除&#xff0c;但是有点麻烦。这时可以用鼠标右键点击回收站&#xff0c;选择“属性”将“回…

如何让机器像人一样多角度思考?协同训练来帮你

作者 | 宁欣头图 | 下载于视觉中国出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;本文目录0. 摘要1. 引言2. 协同训练介绍3. 协同训练改进3.1 基于视图划分的协同训练3.2 基于学习器差异化的协同训练3.3 基于标签置信度的协同训练4. 协同训练应用5. 总结与展望摘要协…

PHP设计模式(4)命令链模式

命令链 模式以松散耦合主题为基础&#xff0c;发送消息、命令和请求&#xff0c;或通过一组处理程序发送任意内容。每个处理程序都会自行判断自己能否处理请求。如果可以&#xff0c;该请求被处理&#xff0c;进程停止。您可以为系统添加或移除处理程序&#xff0c;而不影响其他…

MFC界面库BCGControlBar v25.3新版亮点:Gauge Controls

2019独角兽企业重金招聘Python工程师标准>>> 亲爱的BCGSoft用户&#xff0c;我们非常高兴地宣布BCGControlBar Professional for MFC和BCGSuite for MFC v25.3正式发布&#xff01;新版本添加了对Visual Studio 2017的支持、增强对Windows 10的支持等。接下来几篇文…

如何使用 ASP.NET 实用工具加密凭据和会话状态连接字符串

文章编号:329290最后修改:2006年4月10日修订:8.0 重要说明&#xff1a;本文包含有关如何修改注册表的信息。修改注册表之前&#xff0c;一定要先进行备份&#xff0c;并且一定要知道在发生问题时如何还原注册表。有关如何备份、还原和修改注册表的更多信息&#xff0c;请单击下…

16款小米新品,刚刚雷军只发了5款

会前&#xff0c;雷军在微博上提前疯狂剧透小米即将发布的新品信息。要发布的产品实在太多了&#xff0c;整合提前发布的信息来看&#xff0c;此次发布会可能会是小米有史以来时间跨度最长、新品数量最多的新品发布会&#xff0c;包括小米11 Pro/Ultra、小米MIX新机、小米11青春…

windows下使用aspell开启emacs的单词拼写检查功能

第一步,你需要下载aspell安装文件和至少一个字典,下载地址为http://aspell.net/win32/. 下载之后,分别安装aspell和字典. 需要注意的是,在64位的WIN7下,“C:\Program Files (x86)”是32位安装程序的默认安装目录,而“C:\Program Files"是64位安装程序的默认安装目录,因此a…

老板来了:人脸识别 + 手机推送,老板来了你立刻知道!

背景介绍 学生时代&#xff0c;老师站在窗外的阴影挥之不去。大家在玩手机&#xff0c;看漫画&#xff0c;看小说的时候&#xff0c;总是会找同桌帮忙看着班主任有没有来。 一转眼&#xff0c;曾经的翩翩少年毕业了&#xff0c;新的烦恼来了&#xff0c;在你刷知乎&#xff0c;…

在C#中使用COM+实现事务控制

.NET技术是微软大力推广的下一代平台技术&#xff0c;自从.NET技术架构的正式发布&#xff0c;此项技术也逐渐走向成熟和稳定。按照微软的平台系统占有率&#xff0c;我们不难想象得到&#xff0c;在未来的一两年内.NET技术必定会势如破竹一般的登上主流的技术平台&#xff0c;…