All articles| All Pictures| All Softwares| All Video| Go home page| Write articles| Upload pictures

Reading number is top 10 articles
VBScript实现对Windows注册表的修改_JavaScript技术_编程技术
为Linux和Windows安装PHP和Oracle_php资料_编程技术
C#教程:C#中的显示类型转换
delphi弹出选择对话框选择目录
ASP.NET中“找不到指定模块”的解决办法_.net资料_编程技术
PHP动态网页程序中常用的表单验证类_[PHP教程]
编写数据库操作类,使ASP.NET中的数据库操作变得简单_[Asp.Net教程]
利用自定义分页技术提高数据库性能_[Asp.Net教程]
解决PHP的Failed,opening,required问题_php资料_编程技术
ASP.NET页面传数据的各种方法和分析_[Asp.Net教程]
Reading number is top 10 pictures
Chinese paper-cut grilles art appreciation8
Female model behind the bitterness, often being overcharged4
In the world the most mysterious 21 place landscape1
Earthquake hedge common sense
Beautiful Japanese beauty(漂亮的日本美女)3
到南昌西站了3
Absolutely shocked. National geographic 50 animal photographys2
Average female college students3
A resort photographed beautiful young woman change clothes process vomiting blood1
So beauty, will let you spray blood5
Download software ranking
Tram sex maniac 2 (H) rar bag4
功夫熊猫2(下集)
WebService在.NET中的实战应用教学视频 → 第3集
The Bermuda triangle1
圣殿祭司的ASP.NET.2.0.开发详解-使用C#
Tram sex maniac 2 (H) rar bag6
Kung fu panda - the secret of the teacher
Rio big adventure
Tram sex maniac 2 (H) rar bag1
Unix video tutorial7
归海一刀 published in(发表于) 2014/2/10 6:46:33 Edit(编辑)
PHP与SQL注入攻击_[PHP教程]

PHP与SQL注入攻击_[PHP教程]

PHP与SQL注入攻击_[PHP教程]

SQL注入攻击是黑客攻击网站最常用的手段。如果你的站点没有使用严格的用户输入检验,那么常容易遭到SQL注入攻击。SQL注入攻击通常通过给站点数据库提交不良的数据或查询语句来实现,很可能使数据库中的纪录遭到暴露,更改或被删除。下面来谈谈SQL注入攻击是如何实现的,又如何防范。

  看这个例子:

// supposed input
name = “ilia’; DELETE FROM users;”;
mysql_query(“SELECT * FROM users WHERE name=’{name}’”);


  很明显最后数据库执行的命令是:

SELECT * FROM users WHERE name=ilia; DELETE FROM users


  这就给数据库带来了灾难性的后果--所有记录都被删除了。

  不过如果你使用的数据库是MySQL,那么还好,mysql_query()函数不允许直接执行这样的操作(不能单行进行多个语句操作),所以你可以放心。如果你使用的数据库是SQLite或者PostgreSQL,支持这样的语句,那么就将面临灭顶之灾了。


  上面提到,SQL注入主要是提交不安全的数据给数据库来达到攻击目的。为了防止SQL注入攻击,PHP自带一个功能可以对输入的字符串进行处理,可以在较底层对输入进行安全上的初步处理,也即Magic Quotes。(php.ini magic_quotes_gpc)。如果magic_quotes_gpc选项启用,那么输入的字符串中的单引号,双引号和其它一些字符前将会被自动加上反斜杠\。


  但Magic Quotes并不是一个很通用的解决方案,没能屏蔽所有有潜在危险的字符,并且在许多服务器上Magic Quotes并没有被启用。所以,我们还需要使用其它多种方法来防止SQL注入。


  许多数据库本身就提供这种输入数据处理功能。例如PHP的MySQL操作函数中有一个叫mysql_real_escape_string()的函数,可将特殊字符和可能引起数据库操作出错的字符转义。


  看这段代码:

//如果Magic Quotes功用启用
if (get_magic_quotes_gpc()) {
name = stripslashes(name);
}else{
name = mysql_real_escape_string(name);
}

mysql_query(“SELECT * FROM users WHERE name=’{name}’”);

  注意,在我们使用数据库所带的功能之前要判断一下Magic Quotes是否打开,就像上例中那样,否则两次重复处理就会出错。如果MQ已启用,我们要把加上的\去掉才得到真实数据。


  除了对以上字符串形式的数据进行预处理之外,储存Binary数据到数据库中时,也要注意进行预处理。否则数据可能与数据库自身的存储格式相冲突,引起数据库崩溃,数据记录丢失,甚至丢失整个库的数据。有些数据库如PostgreSQL,提供一个专门用来编码二进制数据的函数pg_escape_bytea(),它可以对数据进行类似于Base64那样的编码。


  如:


// for plain-text data use:
pg_escape_string(regular_strings);

// for binary data use:
pg_escape_bytea(binary_data);


  另一种情况下,我们也要采用这样的机制。那就是数据库系统本身不支持的多字节语言如中文,日语等。其中有些的ASCII范围和二进制数据的范围重叠。


  不过对数据进行编码将有可能导致像LIKE abc% 这样的查询语句失效。







添加到del.icio.us 添加到新浪ViVi 添加到百度搜藏 添加到POCO网摘 添加到天天网摘365Key 添加到和讯网摘 添加到天极网摘 添加到黑米书签 添加到QQ书签 添加到雅虎收藏 添加到奇客发现 diigo it 添加到饭否 添加到飞豆订阅 添加到抓虾收藏 添加到鲜果订阅 digg it 貼到funP 添加到有道阅读 Live Favorites 添加到Newsvine 打印本页 用Email发送本页 在Facebook上分享


Disclaimer Privacy Policy About us Site Map

If you have any requirements, please contact webmaster。(如果有什么要求,请联系站长)
Copyright ©2011-
uuhomepage.com, Inc. All rights reserved.