5. 3.4.2. xp_cmdshell
xp_cmdshell {'command_string'} [, no_output]
master.dbo.xp_cmdshell是存储过程的圣杯,它带来了一个问题,能够调用命令行的数据库用户的和他的运行权限,这个并不可用除非这个网页程序使用的数据库用户是SA. 运行级别为6
sp_makewebtask [@outputfile =] 'outputfile', [@query =] 'query'
6. 另外一个好的调用对象是master.dbo.sp_makewebtask,象你所看的,它是一个本地的输出文件和一个SQL statement。sp_makewebtask可以查询并建立一个包含输出的网页。注重你可以象使用一个UNC路径名一样使用一个本地输出。这个意思就是这个输出文件可以放有在任何一台连在Internet并且有个可写的SMB共享(SMB请求不需要任何的身份验证)。假如有一个防火墙限制了服务器对Internet,试着把输出文件放在网页目录下(你要知道或者猜测网页的目录)。同样值得注重的是引用查询可能是 包括执行其他的存储过程。Making "EXEC xp_cmdshell 'dir c:'" 这个查询将在网页中给出"dir c:"的输出。当你进行嵌套引用的时候,记得单独的引用和双引号.
4.1数据处理
所有的客户端数据可以被恶意的提交的字符或字符串清除。这些可能在所有的应用程序做到,不仅仅是使用SQL查询的。Stripping quotes or putting backslashes in front of them is nowhere near enough.最好的过滤数据的方式是不用规则的表达方式,使它只包括你所想要的字符类型。举个例子,下边的regxp将只能返回字母和数字,尽可能的过滤象s/[^0-9a-zA-Z]//g 这样的非凡字符。可能的时候尽量使用数字,在这以后只使用数字和字母。假如你需要包括各种各样的标志或标点。确信完全的把它们转换成html标记,像“"e;" or ">”。例如,一个用户提交了一个email地址只答应使用数字和字母还有"@", "_", "." 和"-"。仅仅只有这些字符可以转换成html标记。
4.2. 编写安全的web程序
这里同样有很少的非凡的sql注入规则。First, prepend and append a quote to all user input。
尽管数据使数字。其次,限制网页应用程序的数据库用户在数据库里的权限。不要给这个用户访问所有的存储过程的权利假如这个用户只需要访问一些预定义的。 这部分包括了所有在sql注入中有用的系统表,你可以在google上搜索到每一个的表的列的定义
5.1. MS SQL Server
|
5.2. MS Access Server
|
|||
| 共6页: 上一页 [1] [2] [3] [4] 5 [6] 下一页 | |||
![]() |