仓酷云

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

[学习教程] ASP教程之SQL Server使用程序中的初级SQL注进

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

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

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

x
使用cdonts,可以发送、查看邮件,实现webmail的功能。结合wsh,可以实现对nt主机的管理,如nt用户管理、iis虚拟主机设置、exchange邮箱设置等等,就像管理本地机一样方便。server|程序|初级先容:
SQL是一种用于干系数据库的布局化查询言语。它分为很多种,但年夜多半都松懈地基于美国国度尺度化构造最新的尺度SQL-92。典范的实行语句是query,它可以搜集对照有达标性的纪录并前往一个单一的了局集。SQL言语能够修正数据库布局(数据界说言语)和操纵数据库内容(数据操纵言语)。在这份文档中,我们将出格会商SQLSERVER所利用的Transact-SQL言语。
当一个打击者可以经由过程往query中拔出一系列的sql语句来操纵数据写进到使用程序中往,我们管这类办法界说成SQL注进。

一个典范的SQL语句以下:
Selectid,forename,surnamefromauthors
这条语句将前往authors表中一切行的id,forename和surname列。这个了局能够被限定,比方:
Selectid,forename,surnamefromauthorswhereforenamejohnandsurname=smith
必要侧重指明的是字符串john和smith被单引号限定。明白的说,forename和surname字段是被用户供应的输出限定的,打击者能够经由过程输出值交往这个查询中注进一些SQL语句,
以下:
Forename:john
Surname:smith
查询语句变成:
Selectid,forename,surnamefromauthorswhereforename=johnandsurname=smith
当数据库试图往实行这个查询时,它将前往以下毛病:
Server:Msg170,Level15,State1,Line1
Line1:Incorrectsyntaxnearhn
形成这类了局的缘故原由是拔出了.作为定界符的单引号。数据库实验往实行hn,可是失利。假如打击者供应出格的输出如:
Forename:jo;droptableauthors―
Surname:
了局是authors表被删除,形成这类了局的缘故原由我们稍后再讲。

看上往好象经由过程从输出中往失落单引号大概经由过程某些办法制止它们都能够办理这个成绩。这是可行的,可是用这类办法做办理办法会存在几个坚苦。第一,并非一切用户供应的数据都是字符串。假如用户输出的是经由过程用户id来查询author,那我们的查询应当像如许:
Selectid,forename,surnamefromauthorswhereid=1234
在这类情形下,一个打击者能够十分复杂地在数字的开头增加SQL语句,在其他版本的SQL言语中,利用林林总总的限制标记;在数据库办理体系JET引擎中,数据能够被利用#限制。第二,制止单引号只管看上往能够,可是是没需要的,缘故原由我们稍后再讲。

我们更进一步地利用一个复杂的ASP上岸页面来指出哪些能进进SQLSERVER数据库而且实验判别进进一些假造的使用程序的权限。
这是一个提交表单页的代码,让用户输出用户名和暗码:
<HTML>
<HEAD>
<TITLE>LoginPage</TITLE>
</HEAD>

<BODYbgcolor=000000text=cccccc>
<FONTFace=tahomacolor=cccccc>
<CENTER><H1>Login</H1>
<FORMaction=process_loginaspmethod=post>
<TABLE>
<TR><TD>Username:</TD><TD><INPUTtype=textname=usernamesize=100width=100></TD></TR>
<TR><TD>Password:</TD><TD><INPUTtype=passwordname=passwordsize=100withd=100></TD></TR>
</TABLE>
<INPUTtype=submitvalue=Submit><INPUTtype=resetvalue=Reset>
</FORM>
</Font>
</BODY>
</HTML>
上面是process_login.asp的代码,它是用来把持上岸的:
<HTML>
<BODYbgcolor=000000text=ffffff>
<FONTFace=tahomacolor=ffffff>
<STYLE>
p{font-size=20pt!important}
font{font-size=20pt!important}
h1{font-size=64pt!important}
</STYLE>
<%@LANGUAGE=JScript%>
<%
functiontrace(str){
if(Request.form("debug")=="true")
Response.write(str);
}
functionLogin(cn){
varusername;
varpassword;
username=Request.form("username");
password=Request.form("password");
varrso=Server.CreateObject("ADODB.Recordset");
varsql="select*fromuserswhereusername="+username+"andpassword="+password+"";trace("query:"+sql);
rso.open(sql,cn);
if(rso.EOF){
rso.close();
%>
<FONTFace=tahomacolor=cc0000>
<H1><BR><BR>
<CENTER>ACCESSDENIED</CENTER>
</H1>
</BODY>
</HTML>
<%Response.endreturn;}
else{
Session("username")=""+rso("username");
%>
<FONTFace=tahomacolor=00cc00>
<H1><CENTER>ACCESSGRANTED<BR><BR>
Welcome,<%Response.write(rso("Username"));Response.write("</BODY></HTML>");Response.end}
}
functionMain(){//Setupconnection
varusername
varcn=Server.createobject("ADODB.Connection");
cn.connectiontimeout=20;
cn.open("localserver","sa","password");
username=newString(Request.form("username"));
if(username.length>0){
Login(cn);
}
cn.close();
}
Main();
%>
呈现成绩的中央是process_lgin.asp中发生查询语句的部分:
Varsql="select*fromuserswhereusername="+username+"andpassword="+password+"";
假如用户输出的信息以下:
Username:;droptableusers―
Password:
数据库中表users将被删除,回绝任何用户进进使用程序。―标记在Transact-SQL中暗示疏忽―今后的语句,;标记暗示一个查询的停止和另外一个查询的入手下手。―位于username字段中是必需的,它为了使这个特别的查询停止,而且不前往毛病。

打击者能够只需供应他们晓得的用户名,就能够以任何用户上岸,利用以下输出:
Username:admin―
打击者可使用users表中第一个用户,输出以下:
Username:or1=1―
更出格地,打击者可使用完整假造的用户上岸,输出以下:
Username:unionselect1,fictional_us</p>ASP最大的缺点在于网络的安全性和可靠性,企业将经营数据放在开放的平台上,最大的担忧就是如何保证这些数据不被其他人破坏。
精灵巫婆 该用户已被删除
沙发
发表于 2015-1-20 07:42:49 | 只看该作者
从事这个行业,那么你可以学ASP语言,简单快速上手,熟练dreamweav排版,写asp代码,熟练photoshop处理图片,打好基础就行了
分手快乐 该用户已被删除
板凳
发表于 2015-1-23 09:42:37 | 只看该作者
代码的可重用性差:由于是面向结构的编程方式,并且混合html,所以可能页面原型修改一点,整个程序都需要修改,更别提代码重用了。
乐观 该用户已被删除
地板
发表于 2015-1-25 09:25:36 | 只看该作者
另外因为asp需要使用组件,所以了解一点组件的知识(ADODB也是组件)
透明 该用户已被删除
5#
发表于 2015-1-25 15:28:35 | 只看该作者
代码逻辑混乱,难于管理:由于ASP是脚本语言混合html编程,所以你很难看清代码的逻辑关系,并且随着程序的复杂性增加,使得代码的管理十分困难,甚至超出一个程序员所能达到的管理能力,从而造成出错或这样那样的问题。
再见西城 该用户已被删除
6#
发表于 2015-2-2 22:36:10 来自手机 | 只看该作者
作为IE上广为流传的动态网页开发技术,ASP以它简单易学博得了广大WEB程序爱好这的青睐,而且它对运行环境和开发品台的不挑剔,以及有大量有效的参考手册,极大的推广了它的发展。
小妖女 该用户已被删除
7#
发表于 2015-2-25 21:52:45 | 只看该作者
我可以结合自己的经验大致给你说一说,希望对你有所帮助,少走些弯路。
愤怒的大鸟 该用户已被删除
8#
发表于 2015-3-8 06:21:30 | 只看该作者
你可以通过继承已有的对象最大限度保护你以前的投资。并且C#和C++、Java一样提供了完善的调试/纠错体系。
爱飞 该用户已被删除
9#
发表于 2015-3-15 21:07:52 | 只看该作者
我可以结合自己的经验大致给你说一说,希望对你有所帮助,少走些弯路。
莫相离 该用户已被删除
10#
发表于 2015-3-22 04:14:58 | 只看该作者
学习ASP其实应该上升到如何学习程序设计这种境界,其实学习程序设计又是接受一种编程思想。比如ASP如何学习,你也许在以前的学习中碰到过。以下我仔细给你说几点:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-12-24 03:54

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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