1 / 9
文档名称:

构造动态字符串.doc

格式:doc   页数:9页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

构造动态字符串.doc

上传人:tmm958758 2016/6/12 文件大小:0 KB

下载得到文件列表

构造动态字符串.doc

相关文档

文档介绍

文档介绍:构造动态字符串构造动态字符串是一种编程技术, 它允许开发人员在运行过程中动态构造 SQL 语句。开发人员可以使用动态 SQL 来创建通用、灵活的应用。动态 SQL 语句是在执行过程中构造的, 它根据不同的条件产生不同的 SQL 语句。当开发人员在运行过程中需要根据不同的查询标准来决定提取什么字段(如 SELECT 语句) ,或者根据不同的条件来选择不同的查询表时,动态构造 SQL 语句会非常有用。不过, 如果使用参数化查询的话, 开发人员可以以更安全的方式得到相同的结果。参数化查询是指 SQL 语句中包含一个或多个嵌入参数的查询。可以在运行过程中将参数传递给这些查询。包含的嵌入到用户输入中的参数不会被解析成命令而执行, 而且代码不存在被注入的机会。这种将参数嵌入到 SQL 语句中的方法比起使用字符串构造技术来动态构造并执行 SQL 语句来说拥有更高的效率且更加安全。下列 PHP 代码展示了某些开发人员如何根据用户输入来动态构造 SQL 字符串语句。该语句从数据库的表中选择数据。它根据至少在数据库的一条记录中出现的用户输入值来返回记录。//a dynamically built sql string statement in PHP $query = "SELECT * FROM table WHERE field = '$_GET["input"]'"; //a dynamically built sql string statement in .NET query = "SELECT * FROM table WHERE field = '"+ ("input") +"' "; 像上面那样构造动态 SQL 语句的问题是: 如果在将输入传递给动态创建的语句之前, 未对代码进行验证或编码, 那么攻击者会将 SQL 语句作为输入提供给应用并将 SQL 语句传递给数据库加以执行。下面是使用上述代码构造的 SQL 语句: SELECT * FROM TABLE WHERE FIELD = 'input' 1. 转义字符处理不当 SQL 数据库将单引号字符(') 解析成代码与数据间的分界线:假定单引号外面的内容均是需要运行的代码, 而用单引号引起来的内容均是数据。因此, 只需简单地在 URL 或 Web 页面( 或应用) 的字段中输入一个单引号, 就能快速识别出 Web 站点是否会受到 SQL 注入攻击。下面是一个非常简单的应用的源代码, 它将用户输入直接传递给动态创建的 SQL 语句: // build dynamic SQL statement $SQL = "SELECT * FROM table WHERE field = '$_GET["input"]'"; // execute sql statement $result = mysql_query($SQL); // check to see how many rows were returned from the database $rowcount = mysql_num_rows($result); // iterate through the record set returned $row = 1; while ($db_field = mysql