仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 708|回复: 7
打印 上一主题 下一主题

[学习教程] MYSQL网页编程之SQL语句因编写不妥 大概招致体系不平安...

[复制链接]
小妖女 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:19:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
MySQL部署迅速,因此移植过程不会导致生产中断。而且,较短的学习曲线可以让你的系统管理员迅速掌握它的运行和维护。而且,MySQL的易于维护和管理意味着目前的职员可以处理目前的工作。在一样平常的多用户使用体系中,只要具有准确的用户名和暗码的用户才干进进该体系。我们一般必要编写用户登录窗口来把持用户利用该体系,这里以VisualBasic+ADO为例:
1、毛病的发生
用于登录的表:Users(name,pwd)。
创建一个窗体Frmlogin,其上有两个文本框Text1,Text2和两个命令按钮cmdok,cmdexit。两个文本框分离用于让用户输出用户名和暗码,两个命令按钮用于“登录”和“加入”。
1、界说AdoConnection工具和ADORecordSet工具:
以下为援用的内容:
OptionExplicit
DimAdoconAsADODB.Connection
DimAdorsAsADODB.Recordset

2、在Form_Load中举行数据库毗连:
以下为援用的内容:
OptionExplicit
DimAdoconAsADODB.Connection
DimAdorsAsADODB.Recordset
2、在Form_Load中举行数据库毗连:
SetAdocon=NewADODB.Connection
Adocon.CursorLocation=adUseClient
adocon.Open"Provider=Microsoft.jet.OLeDB.4.0.1;DataSource="&&_
App.Path&&"est.mdb;"


cmdok中的代码
以下为援用的内容:
DimsqlstrAsString
sqlstr="select*fromusersswheresname="&&Text1.Text&&_
"andpwd="&&Text2.Text&&""
Setadors=NewADODB.Recordset
SetAdors=Adocon.Execute(sqlstr)
IfAdors.Recordcount>0Then//或IfNotAdors.EOFthen
....
MsgBox"Pass"//经由过程考证
Else
...
MsgBox"Fail"//未经由过程考证
Endif


运转该程序,看起来如许做没有甚么成绩,可是当在Text1中输出恣意字符串(如123),在Text2中输出aora=a时,我们来看sqlstr此时的值:
以下为援用的内容:
select*fromusersswheresname=123andpwd=aora=a
实行如许一个SQL语句,因为or以后的a=a为真值,只需users表中有纪录,则它的前往的eof值必定为False,如许就容易地绕过了体系关于用户和暗码的考证。
如许的成绩将会呈现在一切利用select*fromusersswheresname="&&name&&"andpwd="&&password&&"的各类体系中,不管你是利用那种编程言语。
2、毛病的特性
在收集上,以上成绩特别分明,笔者在很多网站中都发明能利用这类体例进进必要举行用户名和暗码考证的体系。如许的一个SQL毛病具有以下的特性:
1、与编程言语或手艺有关:不管是利用VB、Delphi仍是ASP、JSP。
2、潜伏性:现有的体系中有相称一部分存在着这个毛病,并且不容易发觉。
3、伤害性:不必要举行用户名或暗码的推测便可容易进进体系。
3、办理毛病的办法
1、把持暗码中不克不及呈现空格。
2、对暗码接纳加密体例。
这里要说起一点,加密不克不及接纳过于复杂的算法,由于过于复杂的算法会让人可以机关出形如aora=a的密文,从而进进体系。
3、将用户考证和暗码考证分隔来做,先辈行用户考证,假如用户存在,再举行暗码考证,如许一来也能办理成绩。

DBaaS和其他云服务之间的区别是:DBaaS专注于提供类似关系数据库管理系统RDBMS(比如SQLServer、MySQL和Oracle)的数据库功能。事实上,RDBMS已被证明是一种适合于在各种情况下管理结构化数据的有效工具。
admin 该用户已被删除
沙发
发表于 2015-1-19 08:36:01 | 只看该作者
多走走一此相关论坛,多看一些实例开发,多交流0经验,没什么的,我也是刚学没多久!加油
活着的死人 该用户已被删除
板凳
发表于 2015-1-27 22:28:53 | 只看该作者
很多书籍啊,不过个人认为看书太慢,还不如自己学。多做实际的东西,就会遇到很多问题,网上搜下解决问题。不断重复这个过程,在配合sql的F1功能。
飘飘悠悠 该用户已被删除
地板
发表于 2015-2-5 15:15:41 | 只看该作者
我是新手,正在学习数据库和操作系统,深感理论的泛广,唯有一步一步来,但是又感觉时间不够,收集了很多资料却总是没能认真的看完,希望有一个讨论板块,大家共同解决,共同分享,共同努力
再现理想 该用户已被删除
5#
发表于 2015-3-3 03:43:53 | 只看该作者
总感觉自己还是不会SQL
兰色精灵 该用户已被删除
6#
发表于 2015-3-11 09:37:34 | 只看该作者
如果处理少量数据,比如几百条记录的数据,我不知道这两种情况哪个效率更高,如果处理大量数据呢?比如有表中有20万条记录.
深爱那片海 该用户已被删除
7#
发表于 2015-3-18 03:50:15 | 只看该作者
sqlserver的痛苦之处在于有用文档的匮乏,很多只是表明的东西
简单生活 该用户已被删除
8#
发表于 2015-3-25 12:18:45 | 只看该作者
其中最有名的应该是row_number了。这个终于解决了用临时表生成序列号的历史,而且SQLServer2005的row_number比Oracle的更先进。因为它把Orderby集成到了一起,不用像Oracle那样还要用子查询进行封装。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-5-22 16:53

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表