一条60年的长路,一头连着满目疮痍、积贫积弱、百废待兴的中国,一头连着在改革开放的阳光下活力迸射、向繁荣富强快步迈进的中国……一段60年的时光,是一段人民经历了贫穷短缺、温饱不足,最终进入小康生活的岁月……
经历无数风雨,熬过多少阵痛,60年来,中国共产党领导着中国人民迈向伟大的复兴。
中国民主进程,在新中国六十年之际来到了加速前进的关口,与上层主导深化的“公民有序政治参与”相呼应,在民间,一个中国特色的公民社会正在蓬勃兴起。
庆祝新中国成立60周年!
![]() |
|
美国一个11岁开始创业的小女孩
作者:VGao 日期:2009-04-07
提高效率 广州政务中心除六部门外所有前台电脑断公网
作者:VGao 日期:2008-11-28
初进北京网吧须拍照留档 各方反应良好
作者:VGao 日期:2008-11-19
到明天为止,北京进网吧必须拍照留档的规定实施满一个月。从推行这个政策至今,支持和争论的声音就一直不断:支持者满意的是它的现行效果,而反对者所担心 的是它的未来影响,即是否存在公权滥用从而侵犯私权。目前来看,我们难以对这项规定盖棺论定,惟一可以肯定的是,凡是一项新规的出台必然会引来关注和争论,而争论又必然会促进新规的完善和规范,这对我们的法治进程无疑是好事。
Android再爆严重BUG 输入reboot就重启
作者:VGao 日期:2008-11-09
八类负面心态自毁职场前程
作者:VGao 日期:2008-11-06
有句话说,你最大的敌人,永远是你自己。
有些人能发现乌云的银边,而有些人眼里则永远是满天乌云;有些人愿意从别人的成功中寻找值得自己学习之处,有些人则习惯冷哼一声,靠否定别人来获取内心的平衡。我们邀请了一位心理咨询师、两位职场咨询专家,列举了8种可能影响你前途的职场常见负面心态,希望对大家能有所帮助。
数字化生存 中国互联网启蒙之路
作者:VGao 日期:2008-11-01
比尔·盖茨退休日语录 称“我不能再挡道了”
作者:VGao 日期:2008-06-28
漫游费调了还是贵
作者:VGao 日期:2008-02-20
沸沸扬扬的手机漫游费调整方案出台一周后,并未如愿地尘埃落定,争议仍在继续.
信息产业部、国家发展和改革委员会13日公布:3月1日起实行手机漫游费上限标准新方案,即主叫上限标准降为每分钟0.6元,被叫上限标准降为每分钟0.4元.占用国内长途电路不再另行加收国内长途通话费.
新标准看起来降幅可观.国家发改委更明确指出,与现在的漫游通话费相比,调整后对不同用户的主被叫降幅最高者为71%.然而,广大消费者却似乎并不买账.
中国移动的一些小秘密
作者:VGao 日期:2008-02-17
漫游费和长话费实质是用户为运营商会计成本买单
作者:VGao 日期:2008-02-11
SQL语句注入攻击测试
作者:admin 日期:2006-11-05
做BS模式系统的朋友没有几个人做过SQL语句注入攻击的测试,以及测试出来的预防,对系统做了一个注入攻击测试,只是从前台用简单的语句,就改变了数据库的数据,但是感觉在安全性方面关于数据库的安全测试好像还有别的方面吧,有没有人知道应该注意那些方面那。数据库用SQL SERVER的情况下。
我做过,但没有用工具去测试过,也不知道是用什么工具,一般就针对传递传数时,在文本框中插入一段SQL语句或使用不同的数据类型输入。有时候还可以输入一段javascript 代码进去
做系统测试的不能不注意数据库的安全性问题,此前也碰到过,特搜一文转给大家看看,针对初级朋友吧。
Sql注入式攻击是指利用设计上的漏洞,在目标服务器上运行Sql 命令以及进行其他方式的攻击动态生成Sql命令时没有对用户输入的数据进行验证是Sql注入攻击得逞的主要原因
比如一个在线书店,可以根据用户的输入关键字搜索相关的图书。
string name = GetUserInput("BookName");
string script = "select table_book where book_name? like? N'%" + name + RunSql(script)
RunSql(script);
如果
name? = " ' select @@servername where '' = ' ";
这样就可以得到DB Server的名字
还以在线书店为例,用户只有登陆后才能察看自己的帐户信息,这样做是无可置疑的,然而用户验证的代码如下
//id和password直接来自用户的输入。未做处理
string id = GetUserInput("UserID");
string password = GetUserInput("UserPassword");
tring script = "select * from table_user where User_ID = '" + id? + "' and User_Password? = '" + password? + "' ";
RunSql(script);
如果用户输入的password为“ or ''=' ”,那么生成的script就为
select * from table_user where User_ID = 'UserID' and User_Password? = ' ' or ''=' '
这样一来,即使不知道用户的密码也可以察看该用户的帐户信息了
再比如,入侵者会把一些巧妙伪装的代码嵌入到你动态生成的Sql命令中,比如
Delete table_Book where 1 = 1? ...
use master--
上面的例子都是一些简单的示例,攻击者还可能通过sql的漏洞对操作系统进行攻击,
比如运行
[xp_cmdshell],[xp_regread]
当然实际上的攻击没有这么简单,攻击者还会利用系统设计的其他漏洞。比如程序把数据库返回的出错信息没有进行转换就直接输出给用户看,那么攻击者就设计一些sql语句诱导系统返回需要的信息
从上面的这些例子可以看出,对数据库访问权限的设计不当,给与每一个数据库连接太多的权限,甚至dbo或sa的权限,也是sql注入式攻击利用的主要漏洞之一。
?
1 防范sql注入式攻击
最小权限原则。特别是不要用dbo或者sa账户,为不同的类型的动作或者组建使用不同的账户,最小权限原则适用于所有与安全有关的场合对用户输入进行检查。
对一些特殊字符,比如单引号,双引号,分号,逗号,冒号,连接号等进行转换或者过滤;
使用强数据类型,比如你需要用户输入一个整数,就要把用户输入的数据转换成整数形式;
限制用户输入的长度等等。这些检查要放在server运行,client提交的任何东西都是不可信的使用存储过程,如果一定要使用sq语句,那么用标准的方式组建sql语句,比如可以利用parameters对象,避免用字符串直接拼sq命令。
当sql运行出错时,不要把数据库返回的错误信息全部显示给用户,错误信息经常会透露一些数据库设计的细节针对常用的sql注入式攻击方式对症下药
The Number Two:
如果你输入了这个代码,你将会看到返回一个询问语句:
Select ContactName FROM Customers
Where CustomerID = ''
UNION ALL Select ContactName FROM Customers
Where CustomerID <>''
通过获得空和非空顾客的ID并集,这个查询语句会返回数据库中所有的相关姓名。事实上,这个UNION技术可以被用来获得你数据库中大多数信息,看看这个CustomerID的值:
'UNION ALL Select FirstName + ' ' + LastName FROM
Employees Where LastName <>'
它将SQL语句变成:
Select ContactName FROM Customers
Where CustomerID = ''
UNION ALL Select FirstName + ' ' + LastName FROM
Employees Where LastName <>''
看,那就是攻击程序从你的数据库获得的第一个雇员的名字。
2 更多的攻击程序
如果SQL注入仅仅只有数据暴光这个弱点就已经够糟糕的了,但是,实际上一个良好的攻击程序可以通过这个弱点获取你数据库中所有的资料。看下面这个例子:
';Drop TABLE Customers;--
SQL语句变成:
Select ContactName FROM Customers
Where CustomerID = ''
; Drop TABLE Customers;-- '
这个分号使语句和SQL Server隔离,所以,这里实际上是两个语句。第一个语句不存在的名字,第二个则撤消的整个Customers表。两个—SQL Server注释符,它可以使子句不发生语法错误。
使用这个技术的变异,一个攻击程序可以在任何SQL语句或者存储过程上运行。通过使用xp_cmdshell扩展存储过程,一个攻击程序同样可以在操作系统命令下运行,显然,这是一个严重的漏洞。
3 保护自己的数据库
现在,你知道如何防范SQL注入攻击了吗?首先,你不能在用户输入中构造Where子句,你应该利用参数来使用存储进程。在最初的ASP页面下,重新写的部分将和刚才我们在表中所看到的东西相似。即使你认为在你的应用程序中没有脆弱点,你应该遵守最小特权原则。使用我们建议的其他安全技术允许你的用户仅仅访问他们能够访问的。在你没有发现你数据库脆弱点的时候,只有这样,不会使你的数据库崩溃。
4 最后的建议
这就是全部的SQL Server安全系列。也许你现在不是一个全面的专家,但是你已经了解了很多反面。下一步就是你要保护你SQL Server数据,记住你在这里所学到的知识,并利用到你的数据库中保证你的数据不被那些黑客攻击。
5 预防SQL注入式攻击
对于做ASP网站和写SQL语句的人都会遇到这种问题,什么,你没遇到过?那是你运气好,没人来hack你。
从根本入手,将问题防住,不仅仅“SQL注入式攻击”一个方面,还有其它的安全方面的问题,都要引起我们足够的重视,这是个习惯。
//附引文
Michael Otey(MSDN)
1.使用双引号
使用双引号替换掉所有用户输入的单引号,这个简单的预防措施将在很大程序上预防SQL注射攻击,单引号常常结束掉SQL语句,可能给于输入者不必要的权力。用双引号替换掉单引号可以使许多SQL注射攻击失败。
第一次翻译文章,不好的地方大家不要见怪:)
2.避免动态的SQL语句
动态的SQL语句是一个进行数据库查询的强大的工具,但把它和用户输入混合在一起就使SQL注射成为了可能。将动态的SQL语句替换成预编译的SQL或者存储过程对大多数应用程序是可行的。预编译的SQL或者存储过程可以将用户的输入做为参数而不是SQL命令来接收,这样就限制了入侵者的行动。当然,它不适用于你的存储过程中是利用用户输入来生成SQL命令的情况。在这种情况下,用户输入的SQL命令仍可能得到执行,你的数据库仍然有受SQL注射攻击的危险。
3.验证所有的输入
如果一个输入框只可能包括数字,那么要通过验证确保用户输入的都是数字。如果可以接受字母,那就要检查是不是存在不可接受的字符。确保你的应用程序要检查以下字符:分号,等号,破折号,括号以及SQL关键字。.NET FRAMEWORK提供了正则表达式来进行复杂的模式匹配,运用它可以达到良好的效果。另外限制用户输入的字符的长度也是一个好主意。验证用户输入是必须的,因为入侵者可以利用WEB的开放性对应用程序进行SQL注射攻击。
4.最小权力法则
应用程序使用的去连接数据库的帐户应该只拥有必须的特权,这样有助于保护整个系统尽可能少的受到入侵者的危害。应用程序不应该用SA或者管理员帐户去连接数据库。作为替代,它应该只有访问它要调用的单个库的权力。
所有的关系型数据库——包括SQL SERVER,ORACLE,IBM DB2和MYSQL都容易受到SQL注入攻击。你可以购买一些产品来保护你的系统免受SQL注射攻击,但在大多数商务中,预防SQL注射必须是基于代码级的。SQL注射攻击主要来自WEB应用程序将用户的包含动态SQL代码的输入转换成了SQL 命令给数据库执行。你可以采用下面的四个重要的步骤来保护你的WEB应用程序免受攻击。除此之外,上个月我在强调的MSDN中模式与训练也提出了一些保护数据库驱动的WEB应用程序的建议。
Sql语句密码验证的安全漏洞
Sql语句作为国际标准的数据库查询语句,在各种编程环境中得到了广泛的应用。作为一个成熟、稳定的系统,用户登陆和密码验证是必不可少的。笔者在平时的编程工作中发现,许多程序员在用sql语句进行用户密码验证时是通过一个类似这样的语句来实现的:
Sql="Select * from 用户表 where 姓名='"+name+"' and 密码='"+password+"'"
其中name和password是存放用户输入的用户名和口令,通过执行上述语句来验证用户和密码是否合法有效。但是通过分析可以发现,上述语句却存在着致命的漏洞。当我们在用户名称中输入下面的字符串时:111'or'1=1,然后口令随便输入,我们设为aaaa。变量代换后,sql语句就变成了下面的字符串:
Sql="Select * from 用户表 where 姓名='111'or'1=1' and 密码='aaaa'
我们都知道select语句在判断查询条件时,遇到或(or)操作就会忽略下面的与(and)操作,而在上面的语句中1=1的值永远为true,这意味着无论在密码中输入什么值,均能通过上述的密码验证!这个问题的解决很简单,方法也很多,最常用的是在执行验证之前,对用户输入的用户和密码进行合法性判断,不允许输入单引号、等号等特殊字符。
上述问题虽然看起来简单,但确实是存在的。例如在互联网上很有名气的网络游戏"笑傲江湖"的早期版本就存在着这样的问题,笔者也是在看了有关此游戏的漏洞报告后才仔细分析了自己以前编写的一些程序,竟然有不少也存在着这样的漏洞。这确实应该引起我们的注意。这也暴露出包括笔者在内的年轻程序员在编程经验和安全意识上的不足。同时也提醒我们编程工作者在程序设计时应当充分考虑程序的安全性,不可有半点马虎,一个看似很小的疏漏可能就会造成很严重的后果。
- 1

