喜悦国际村 
» 游客:  注册 | 登录 | 搜索 | 统计 | 喜悦证交所 | 帮助

RSS 订阅当前论坛  

上一主题 下一主题
     
标题: [原创] sql注入  
 
robinhunan
注册会员
Rank: 2
一般会员



UID 20392
精华 0
积分 180
帖子 150
金钱 180 喜悦币
威望 0
人脉 0
阅读权限 20
注册 2003-6-3
状态 离线
sql注入

最近看到phptek,
有sql注入,看来是个问题呢. 如果涉及金钱,比如订单这些被注入就麻烦了.

百度一下 ,居然搜到了 百度一下,找到相关网页约1,700,000篇,用时0.017秒   
http://www.baidu.com/s?wd=sql+%D7%A2%C8%EB , 有的文章还好几页.介绍如何攻击.但是防范没有,非常搞笑的是还有做sql注入防火墙的厂商?
不知道 是不是我认识不到问题的严重性.还是把事情想象的太简单?
我做了以前也做过订票系统.并没有招受sql注入.

记得去年的时候 我和罗毅峰他们还讨论了很久sql注入.感谢毅峰和同事
有点婆婆妈妈了.言归正传
我总结了一下,数据库其实来,可以分成两种数据类型就行了
一个是数字型 ( int ,float,bigint ,统统的都是,这类简单,只需要要把得到的数字用intval或者floatval 转换,肯定没法攻击了)
另外一个非数字型 ( varchar,char,text,等一堆乱七八糟的东西)

主要是这类如何防止,sql注入? 我写了一个很简单用了很久的函数quote() 没有问题,如果不是我比较走运的话
理论上来说还是可用的?
但是用它我用来很久时间了.是没有问题的.
另外 有了quote()函数就在php.ini 把
;Magic quotes for incoming GET/POST/Cookie data.
magic_quotes_gpc = Off
如果是On的话,需要GET/POST/COOKIE这些变量的2倍内存,还要折磨cpu.同情一下他这个可怜的家伙.
common.php代码    ,
附件是c版本的

<?php
/**
* 防sql注入
* @author: zhuyubing@gmail.com
* */
/**
* reject sql inject
*/
if (!function_exists (quote))
{
        function quote($var)
        {
            if (strlen($var))
            {
                $var=!get_magic_quotes_gpc() ? $var : stripslashes($var);
                $var = str_replace("'","\'",$var);
            }
            return "'$var'";
        }
}

if (!function_exists (hash_num)){
        function hash_num($input)
        {
            $hash = 5381;

            for ($i = 0; $i < strlen($str); $i++)
            {
                $c    = ord($str{$i});
                $hash = (($hash << 5) + $hash) + $c;
            }
            return $hash;
         }
}
/**************** end *************************/
?>





<?php
/**
* 防sql测试代码
CREATE TABLE IF NOT EXISTS `tb` (
  `id` int(10) unsigned NOT NULL auto_increment,
  `age` tinyint(3) unsigned NOT NULL,
  `name` char(100) NOT NULL,
  `note` text NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 ;
**/
include_once('common.php');
var_dump(hash_num('dddd'));

if(empty($_GET))
{
        $_GET = array('age'=>'99','name'=>'a\'b\\\'c";','note'=>"a'b\'\nc#");
}

$age = (int)$_GET['age'];
$name = quote($_GET['name']);
$note = quote($_GET['note']);

$sql = "INSERT INTO `tb` ( `age`, `name`, `note`) VALUES
( $age, $name, $note)";

var_dump($sql);

?>


 附件: 您所在的用户组无法下载或查看附件
2008-4-11 03:23 PM#1
查看资料  发短消息  QQ  顶部
 
沉默的抗议
金牌会员
Rank: 6Rank: 6


UID 88384
精华 0
积分 1065
帖子 555
金钱 1065 喜悦币
威望 0
人脉 0
阅读权限 70
注册 2007-2-16
状态 离线
[推荐阅读] 赛美特传媒急招PHP工程师,待遇从优!
学习,学习
2008-4-11 08:36 PM#2
查看资料  发短消息  QQ  顶部
 
mdy_jun
注册会员
Rank: 2



UID 72596
精华 0
积分 178
帖子 159
金钱 178 喜悦币
威望 0
人脉 0
阅读权限 20
注册 2006-4-30
状态 在线
[推荐阅读] 网上购物安全无忧,一切就在强的信用卡服务~~
呵呵。好理解。不错



http://movie.mamabian.com
免费看最新最全的电影
2008-4-16 10:29 AM#3
查看资料  访问主页  发短消息  顶部
 
qh663
版主
Rank: 7Rank: 7Rank: 7
中级会员


UID 30020
精华 0
积分 546
帖子 580
金钱 546 喜悦币
威望 0
人脉 0
阅读权限 100
注册 2004-7-13
来自 河源
状态 离线
[推荐阅读] 在线急等!!
很多人都是封装用的,框架,一载入的时候就已经防注入了。遍历POST,GET,SESSION,COOKIE等外部不可信变量,就算是FILE数组也要检查呢



五百多篇PHP学习资料
喜悦村BLOG
php团队接兼职项目QQ:80031807
PHP群:768844
2008-4-21 04:56 AM#4
查看资料  访问主页  Blog  发短消息  QQ  顶部
 
xieaotian (老老仙)
版主
Rank: 7Rank: 7Rank: 7


UID 82205
精华 1
积分 1122
帖子 1367
金钱 1122 喜悦币
威望 0
人脉 0
阅读权限 100
注册 2006-10-26
来自 老老神仙部落
状态 离线
[推荐阅读] 面向对象与设计模式的解释
恩,学习啦



http://www.okpython.com
让中国的python发展的更快。
2008-4-21 08:05 AM#5
查看资料  访问主页  Blog  发短消息  QQ  顶部
 
Ultrawind
中级会员
Rank: 3Rank: 3
一般会员



UID 67136
精华 0
积分 272
帖子 198
金钱 272 喜悦币
威望 0
人脉 0
阅读权限 30
注册 2005-10-7
状态 离线
[推荐阅读] 勇敢的发一份面试题!
qh663 说的对,我也是这么做的



乐乐龙网站-龙客-全新的概念-全新的体验
2008-4-21 10:22 AM#6
查看资料  发短消息  顶部
     


  可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题 | 开通个人空间  


 


Powered by Discuz! 6.1.0  © 2001-2010 Comsenz Inc.
Processed in 0.022431 second(s), 6 queries

(冀ICP备05009913号) 管理员:sadly 邮箱/MSN: sadly@phpx.com QQ:824008(长隐) 清除 Cookies - - Archiver - WAP