WEB开发网
开发学院数据库MSSQL Server 在SQL Server中正确使用参数报表 阅读

在SQL Server中正确使用参数报表

 2010-10-01 09:00:29 来源:WEB开发网   
核心提示: 首先,在客户端将报表查询语句传递给数据库之前,在SQL Server中正确使用参数报表(2),即将参数复制给Select语句之前,最好进行验证,真正的参数是订单ID(整数型数据类型)而不是订单号码(字符串数据类型),通过这个数据类型转换,即要验证输入的参数值中,是否存在一些特殊的符号

首先,在客户端将报表查询语句传递给数据库之前,即将参数复制给Select语句之前,最好进行验证。即要验证输入的参数值中,是否存在一些特殊的符号。这些符号往往跟输入攻击有关。如果存在这些特殊字符的话,则需要向用户提供警告信息,表明存在注入式攻击的可能性。并且,系统可以拒绝接受这个参数。这个避免注入式攻击的方法比较消极。如果这些特殊符号确实是查询参数中包含的内容,那么也无法使用。

其次,可以通过值列表的方式来向数据库传递参数。在没有提供值列表的情况下,如果参数是字符类型的,则系统向用户显示的是一个可以使用任何值的文本框。此时数据库管理员可以使用可用值列表的方式来规范化参数的输入,限制其输入一些特殊的字符。也就是说,在定义 String类型的参数报表时,让系统向用户显示一个下拉的列表框,然后用户通过选择来指定参数。这个操作就跟Excel表格中的下拉列框差不多,用户只能够选择数据库管理员所提供的值,或者说只能够选择某张表中存在的值。由于用户不能够自己输入值,而只能够选择,这就可以有效的避免注入式攻击。不过采用这种方式有一个缺陷,就是如果有效的值太多的话,这个列表就会很长。为此用户在选择参数的时候,就会很麻烦。如当有效值有500个的话,那么就需要在 500个值中选择一个值,显然这有点困难。即使按照参数的名字顺序来排列,选择也是比较麻烦的。大内存SQLServer数据库的加速剂

第三,可以利用列表查询的方式,来避免注入式攻击。即当用户输入一个参数之后,系统会自动从一个列表中查询是否存在这个值。如果存在的话,则将这个参数赋值给查询语句中的变量。如果不存在的话则提醒用户参数可能输入错误。如现在有一张销售订单明细报表。用户可能需要根据订单号码来查询销售订单明细。此时这个订单号码就是一个字符型的参数。当用户输入这个参数的时候,并不是马上传递给数据库,这么做太危险,容易产生注入式攻击。而是前台应用程序也从后台数据库中取得所有的销售订单的订单号码信息。当用户输入参数之后,前台应用程序会把这个用户输入的参数跟自己查询出来的信息先进行对比。如果有匹配的信息,就将这个参数传递给后台数据库。如果没有的话,就向用户报告错误的信息。有些应用程序在设计的时候,还会更进一步。如客户端程序会先从数据库中取得订单号码与对应的订单ID。当用户输入参数之后,会进行比对。如果比对成功的话,那么客户端应用程序会将这个订单号码对应的订单ID作为参数传递给查询语句。也就是说,从数据库服务器角度来讲,真正的参数是订单ID(整数型数据类型)而不是订单号码(字符串数据类型)。通过这个数据类型转换,从而可以从根本上防止注入式的攻击。

Tags:SQL Server 正确

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接