ASP sql问题??
如果我没猜错的话,你的字段都是数值型吧!该成下面的试试!
set rs=server.createobject("adodb.recordset")
sql="select * from new where id ="&id_first&""
rs.open sql,conn1,1,1
还一个就是用between吧
set rs=server.createobject("adodb.recordset")
sql="select * from new where id between "&id_first&" and "&id_last&""
rs.open sql,conn1,1,1
在ASP中使用SQL语句
在ASP中使用SQL语句之 SELECT 语句五花八门的SQL产品多得要命 或许你早顾不得其它甩开袖子就动手干了 但你要同时采用ASP和SQL的话就可能会头晕 MySQL SQL Server和mSQL都是绝佳的SQL工具 可惜 在ASP的环境下你却用不着它们来创建实用的SQL语句 不过 你可以利用自己掌握的Access知识以及相应的Access技能 再加上我们的提示和技巧 相信一定能成功地在你的ASP网页中加入SQL 在SQL的世界里 最最基础的操作就是SELECT 语句了 在数据库工具下直接采用SQL的时候很多人都会熟悉下面的操作 SELECT what FROM whichTable WHERE criteria 执行以上语句就会创建一个存放其结果的查询 而在ASP页面文件上 你也可以采用以上的一般语法 不过情况稍微不同 ASP编程的时候 SELECT 语句的内容要作为字符串赋给一个变量 SQL = \ SELECT what FROM whichTable WHERE criteria\ 好了 明白了ASP下SQL 说话 的方式 接下来如法炮制即可 只要满足你的需要 传统的SQL查询模式和条件查询都能派用场 举例说明 不妨假设你的数据库内有个数据表 名字是Products 现在你想取出这个表里的全部记录 然后你就编写了下面的代码 SQL =\ SELECT * FROM Products\ 以上代码——SQL语句的作用就是取出表内的全部数据——执行后将会选出数据表内的全部记录 不过 要是只想从表内取出某个特定列 比如p_name 那就不能用 * 通配符了 这里得键入具体某列的名字 代码如下 SQL =\ SELECT p_name FROM Products\ 执行以上查询之后Products 表内 p_name 列的内容就会全被选取出来 在ASP中使用SQL语句之 用WHERE子句设置查询条件 有的时候取出全部数据库记录也许正好满足你的要求 不过 在大多数情况下我们通常只需得到部分记录 这样一来该如何设计查询呢?当然会更费点脑筋了 何况本文也存心不想让你去用那个什么劳什子的recordset 举个例子 假如你只打算取出p_name 记录 而且这些记录的名字必须以字母w打头 那么你就要用到下面的WHERE 子句了 SQL =\ SELECT p_name FROM Products WHERE p_name LIKE \ W%\ \ WHERE 关键词的后面跟着用来过滤数据的条件 有了这些条件的帮助 只有满足一定标准的数据才会被查询出来 在以上的例子里 查询的结果只会得到名字以w 打头的p_name 记录 以上例子中 百分比符号(%)的含义是指示查询返回所有w 字母打头而且后面是任何数据甚至没有数据的记录条目 所以 在执行以上查询的时候 west 和 willow 就会从Products 表内被选取出来并存放在查询里 就像你看到的那样 只要仔细地设计SELECT 语句 你就可以限制recordset 中返回的信息量 多琢磨琢磨总能满足你的要求 这些啊还不过是掌握SQL用途刚起步 为了帮助你逐步掌握复杂的SELECT 语句用法 下面就让我们再来看一下关键的标准术语 比较运算符 这些玩意都是你在构筑自己的SELECT 字符串来获得特定数据时要经常用到的 WHERE子句基础在开始创建WHERE 子句的时候 最简单的方式是采用标准的比较符号 它们是 >= 和 = 显然 你很快就能明白以下代码的含义和具体运行结果 SELECT * FROM Products WHERE p_price >= SELECT * FROM Products WHERE p_price SELECT * FROM Products WHERE p_version = \ \ 注意 这里你会注意到 最后一个例句中的数字 周围加了单引号 原因是这样的 在这个例子中的 \ \ 是文本类型而非数字类型 因为你会把 SELECT 语句放到引号中来把它作为一个值赋给变量 所以你也可以在语句中采用引号 lishixinzhi/Article/program/net/201311/12295
ASP 怎么连接SQL数据库
ASP与SQL数据库连接语句具体如下:Set conn = Server.CreateObject("ADODB.Connection")connstr = "provider=Sqloledb;server=服务器名;uid=用户名;pwd=密码;database=数据库名"conn.Open connstrIf Err Thenerr.ClearSet conn = NothingResponse.Write "数据库连接出错,请检查连接字串"Response.End扩展资料:SQL常用命令使用方法:(1) 数据记录筛选:sql="select * from 数据表 where 字段名=字段值 order by 字段名 "sql="select * from 数据表 where 字段名 like ‘%字段值%‘ order by 字段名 "sql="select top 10 * from 数据表 where 字段名 order by 字段名 "sql="select * from 数据表 where 字段名 in (‘值1‘,‘值2‘,‘值3‘)"sql="select * from 数据表 where 字段名 between 值1 and 值2"(2) 更新数据记录:sql="update 数据表 set 字段名=字段值 where 条件表达式"sql="update 数据表 set 字段1=值1,字段2=值2 …… 字段n=值n where 条件表达式"(3) 删除数据记录:sql="delete from 数据表 where 条件表达式"sql="delete from 数据表" (将数据表所有记录删除)
ASP 怎么连接SQL数据库
ASP与SQL数据库连接语句具体如下:Set conn = Server.CreateObject("ADODB.Connection")connstr = "provider=Sqloledb;server=服务器名;uid=用户名;pwd=密码;database=数据库名"conn.Open connstrIf Err Thenerr.ClearSet conn = NothingResponse.Write "数据库连接出错,请检查连接字串"Response.End扩展资料:SQL常用命令使用方法:(1) 数据记录筛选:sql="select * from 数据表 where 字段名=字段值 order by 字段名 "sql="select * from 数据表 where 字段名 like ‘%字段值%‘ order by 字段名 "sql="select top 10 * from 数据表 where 字段名 order by 字段名 "sql="select * from 数据表 where 字段名 in (‘值1‘,‘值2‘,‘值3‘)"sql="select * from 数据表 where 字段名 between 值1 and 值2"(2) 更新数据记录:sql="update 数据表 set 字段名=字段值 where 条件表达式"sql="update 数据表 set 字段1=值1,字段2=值2 …… 字段n=值n where 条件表达式"(3) 删除数据记录:sql="delete from 数据表 where 条件表达式"sql="delete from 数据表" (将数据表所有记录删除)
ASP.NET如何防止SQL注入
ASP.NET如何防止SQL注入 一、什么是SQL注入式攻击? 所谓SQL注入式攻击,就是攻击者把SQL命令插入到Web表单的输入域或页面请求的查询字符串,欺骗服务器执行恶意的SQL命令。在某些表单中,用户输入的内容直接用来构造(或者影响)动态SQL命令,或作为存储过程的输入参数,这类表单特别容易受到SQL注入式攻击。常见的SQL注入式攻击过程类如: ⑴ 某个ASP.NET Web应用有一个登录页面,这个登录页面控制着用户是否有权访问应用,它要求用户输入一个名称和密码。 ⑵ 登录页面中输入的内容将直接用来构造动态的SQL命令,或者直接用作存储过程的参数。下面是ASP.NET应用构造查询的一个例子: System.Text.StringBuilder query = new System.Text.StringBuilder(”select * from Users where login = ’”)。Append(txtLogin.Text)。Append(”’ AND password=’”)。Append(txtPassword.Text)。Append(”’”); ⑶ 攻击者在用户名字和密码输入框中输入”’或’1’=’1″之类的内容。 ⑷ 用户输入的内容提交给服务器之后,服务器运行上面的ASP.NET代码构造出查询用户的SQL命令,但由于攻击者输入的内容非常特殊,所以最后得到的 SQL命令变成:select * from Users where login = ’’ or ’1’=’1’ AND password = ’’ or ’1’=’1’. ⑸ 服务器执行查询或存储过程,将用户输入的身份信息和服务器中保存的身份信息进行对比。 ⑹ 由于SQL命令实际上已被注入式攻击修改,已经不能真正验证用户身份,所以系统会错误地授权给攻击者。 如果攻击者知道应用会将表单中输入的内容直接用于验证身份的查询,他就会尝试输入某些特殊的SQL字符串篡改查询改变其原来的功能,欺骗系统授予访问权限。 系统环境不同,攻击者可能造成的损害也不同,这主要由应用访问数据库的安全权限决定。如果用户的帐户具有管理员或其他比较高级的权限,攻击者就可能对数据库的表执行各种他想要做的操作,包括添加、删除或更新数据,甚至可能直接删除表。 二、如何防范? 好在要防止ASP.NET应用被SQL注入式攻击闯入并不是一件特别困难的事情,只要在利用表单输入的内容构造SQL命令之前,把所有输入内容过滤一番就可以了。过滤输入内容可以按多种方式进行。 ⑴ 对于动态构造SQL查询的场合,可以使用下面的技术: 第一:替换单引号,即把所有单独出现的单引号改成两个单引号,防止攻击者修改SQL命令的含义。再来看前面的例子,”select * from Users where login = ’’’ or ’’1’’=’’1’ AND password = ’’’ or ’’1’’=’’1’”显然会得到与”select * from Users where login = ’’ or ’1’=’1’ AND password = ’’ or ’1’=’1’”不同的结果。 第二:删除用户输入内容中的所有连字符,防止攻击者构造出类如”select * from Users where login = ’mas’ —— AND password =’’”之类的查询,因为这类查询的后半部分已经被注释掉,不再有效,攻击者只要知道一个合法的用户登录名称,根本不需要知道用户的.密码就可以顺利获得访问权限。 第三:对于用来执行查询的数据库帐户,限制其权限。用不同的用户帐户执行查询、插入、更新、删除操作。由于隔离了不同帐户可执行的操作,因而也就防止了原本用于执行select命令的地方却被用于执行insert、update或delete命令。 ⑵ 用存储过程来执行所有的查询。SQL参数的传递方式将防止攻击者利用单引号和连字符实施攻击。此外,它还使得数据库权限可以限制到只允许特定的存储过程执行,所有的用户输入必须遵从被调用的存储过程的安全上下文,这样就很难再发生注入式攻击了。 ⑶ 限制表单或查询字符串输入的长度。如果用户的登录名字最多只有10个字符,那么不要认可表单中输入的10个以上的字符,这将大大增加攻击者在SQL命令中插入有害代码的难度。 ⑷ 检查用户输入的合法性,确信输入的内容只包含合法的数据。数据检查应当在客户端和服务器端都执行——之所以要执行服务器端验证,是为了弥补客户端验证机制脆弱的安全性。 在客户端,攻击者完全有可能获得网页的源代码,修改验证合法性的脚本(或者直接删除脚本),然后将非法内容通过修改后的表单提交给服务器。因此,要保证验证操作确实已经执行,唯一的办法就是在服务器端也执行验证。你可以使用许多内建的验证对象,例如 RegularExpressionValidator,它们能够自动生成验证用的客户端脚本,当然你也可以插入服务器端的方法调用。如果找不到现成的验证对象,你可以通过CustomValidator自己创建一个。 ⑸ 将用户登录名称、密码等数据加密保存。加密用户输入的数据,然后再将它与数据库中保存的数据比较,这相当于对用户输入的数据进行了”消毒”处理,用户输入的数据不再对数据库有任何特殊的意义,从而也就防止了攻击者注入SQL命令。 System.Web.Security.FormsAuthentication类有一个 HashPasswordForStoringInConfigFile,非常适合于对输入数据进行消毒处理。 ⑹ 检查提取数据的查询所返回的记录数量。如果程序只要求返回一个记录,但实际返回的记录却超过一行,那就当作出错处理。 ;
如何防止sql注入
转载:http://www.iteye.com/topic/617072SQL注入攻击的总体思路:发现SQL注入位置;判断服务器类型和后台数据库类型;确定可执行情况对于有些攻击者而言,一般会采取sql注入法。下面我也谈一下自己关于sql注入法的感悟。注入法:从理论上说,认证网页中会有型如:select * from admin where username=‘XXX‘ and password=‘YYY‘ 的语句,若在正式运行此句之前,如果没有进行必要的字符过滤,则很容易实施SQL注入。如在用户名文本框内输入:abc’ or 1=1-- 在密码框内输入:123 则SQL语句变成:select * from admin where username=‘abc’ or 1=1 and password=‘123’ 不管用户输入任何用户名与密码,此语句永远都能正确执行,用户轻易骗过系统,获取合法身份。猜解法:基本思路是:猜解所有数据库名称,猜出库中的每张表名,分析可能是存放用户名与密码的表名,猜出表中的每个字段名,猜出表中的每条记录内容。还有一种方式可以获得你的数据库名和每张表的名。就是通过在形如:http://www. .cn/news?id=10‘的方式来通过报错获得你的数据库名和表名!对于jsp而言我们一般采取一下策略来应对:1、PreparedStatement如果你已经是稍有水平开发者,你就应该始终以PreparedStatement代替Statement.以下是几点原因 1)、代码的可读性和可维护性. 2)、PreparedStatement尽最大可能提高性能. 3)、最重要的一点是极大地提高了安全性.到目前为止,有一些人(包括本人)连基本的恶义SQL语法都不知道.String sql = "select * from tb_name where name= ‘"+varname+"‘ and passwd=‘"+varpasswd+"‘";如果我们把[‘ or ‘1‘ = ‘1]作为name传入进来.密码随意,看看会成为什么?select * from tb_name = ‘or ‘1‘ = ‘1‘ and passwd = ‘随意‘ ;因为‘1‘=‘1‘肯定成立,所以可以任何通过验证.更有甚者:把[‘; drop table tb_name; ]作为varpasswd传入进来,则:select * from tb_name = ‘随意‘ and passwd = ‘‘; drop table tb_name; 有些数据库是不会让你成功的,但也有很多数据库就可以使这些语句得到执行.而如果你使用预编译语句.你传入的任何内容就不会和原来的语句发生任何匹配的关系.(前提是数据库本身支持预编译,但上前可能没有什么服务端数据库不支持编译了,只有少数的桌面数据库,就是直接文件访问的那些只要全使用预编译语句,你就用不着对传入的数据做任何过虑.而如果使用普通的 statement,有可能要对drop,; 等做费尽心机的判断和过虑.2、正则表达式 2.1、检测SQL meta-characters的正则表达式 /(\%27)|(\‘)|(\-\-)|(\%23)|(#)/ix 2.2、修正检测SQL meta-characters的正则表达式 /((\%3D)|(=))[^\n]*((\%27)|(\‘)|(\-\-) |(\%3B)|(:))/i 2.3、典型的 SQL 注入攻击的正则表达式 /\w*((\%27)|(\‘))((\%6F)|o|(\%4F))((\%72)|r|(\ ))/ix 2.4、检测SQL注入,UNION查询关键字的正则表达式 /((\%27)|(\‘))union/ix(\%27)|(\‘) - 单引号和它的hex等值union - union关键字。 2.5、检测MS SQL Server SQL注入攻击的正则表达式 /exec(\s|\+)+(s|x)p\w+/ix3、字符串过滤public static String filterContent(String content){String flt ="‘|and|exec|insert|select|delete|update|count|*|%|chr|mid|master|truncate|char|declare|; |or|-|+|,";Stringfilter[] = flt.split("|");for(int i=0; i {content.replace(filter[i], "");}return content;}4、不安全字符屏蔽本部分采用js来屏蔽,起的作用很小,这样用屏蔽关键字的方法虽然有一定作用,但是在实际应用中这些 SQL的关键字也可能成为真正的查询关键字,到那是被你屏蔽了那用户不是不能正常的使用了。 只要在代码规范上下点功夫就可以了。凡涉及到执行的SQL中有变量时,用JDBC(或者其他数据持久层)提供的如:PreparedStatement就可以 ,切记不要用拼接字符串的方法就可以了.功能介绍:检查是否含有"‘","\\","/"参数说明:要检查的字符串返回值:0:是 1:不是函数名是function check(a){return 1;fibdn = new Array ("‘" ,"\\","/");i=fibdn.length;j=a.length;for (ii=0; ii { for (jj=0; jj{ temp1=a.charAt(jj);temp2=fibdn[ii];if (tem‘; p1==temp2){ return 0; }}}return 1;}如何防止sql注入标签:
如何用asp连接SQL Server 数据库
ASP连接SQL数据库 的几种方法介绍
在Internet网上随处可见留言板、讨论组、网上投票、网上调查、聊天室等Internet功能模块,在许多单位的小型局域网中也运行着各种各样的办公自动化网络系统,这些程序都是利用ASP(Active Server Page)与数据库技术结合而实现的。页面与数据库源建立连接是访问数据库的一步,也是最为重要的一步。
在ASP脚本中可以通过三种实用的方法连接数据库:通过ODBC DSN建立连接,通过oledb建立连接,通过driver建立连接。
ActiveX数据对象(ADO)
ADO(ActiveX Data Object),是一组优化的访问数据库的专用对象集,它为ASP提供了完整的站点数据库解决方案,它作用在服务器端,提供含有数据库信息的主页内容,通过执行SQL命令,让用户在浏览器画面中输入,更新和删除站点数据库的信息。ADO的主要优点是易用、高速、占用内存和磁盘空间少,所以非常适合于作为服务器端的数据库访问技术。
ADO主要包括Connection,Recordset和Command三个对象, 它们的主要功能如下:
Connection对象:负责打开或连接数据库文件;
Recordset对象:存取数据库的内容;
Command对象:对数据库下达行动查询指令,以及执行SQL Server的存储过程。
一、利用ADO组件直接连接数据库方式
<%
Dim Conn,strConn
Set Conn=Server.CreateObjec(“ADODB.Connection”)
strConn=”Driver={SQL Server};Server=ServerName;”
“Uid=UserName;Pwd=Password;”
“DataBase=DatabaseName”
Conn.Open strConn,1,1
%>
二、通过ODBC DSN建立连接
运用ODBC数据源,首先必须在控制面板的ODBC中设置数据源,然后再编写脚本和数据库源建立连接。
1、创建 ODBC DSN
DSN:Data Source Name ;数据源名称。
Windows DSN 文件(数据源名)主要是用来存储数据库连接信息。如果你有很多网页需要传送数据,就可以很简单的通过DSN文件路径来完成而不需要传送数据到每个页面了。
出于安全考虑,DSN文件一般放置再主机目录的子目录中,这样不明访问者就访问不了这个目录。DSN文件 需要在ASP和ADO一起访问数据库。名称为:”_dsn” 在主机帐户的根目录中(注: DSN文件仅支持windows 方案)
ODBC(Open Database Connectivity,开放数据库互连),要访问一个数据库,首先必须用ODBC组件管理器注册一个数据源,管理器根据数据源提供的数据库位置、数据库类型及ODBC驱动程序等信息,建立起ODBC与具体数据库的联系。这样,只要应用程序将数据源名提供给ODBC,ODBC就能建立起与相应数据库的连接。
配置 SQL Server 数据库系统 DSN:注意如果数据库驻留在远程服务器上,请与服务器管理员联系,获取附加的配置信息;下面的过程使用 SQL Server 的 ODBC 默认的设置为例。
在"创建新数据源"对话框中,从列表框中选择"SQL Server",然后单击"下一步"。键入 DSN 文件的名称,然后单击"下一步"。单击"完成"创建数据源。键入运行 SQL 服务程序的服务器的名称、登录 ID 和密码。在"创建 SQL Server 的新数据源"对话框中,在"服务器"列表框中键入包含 SQL Server 数据库的服务器的名称,然后单击"下一步"。选择验证登录 ID 的方式。如果要选择 SQL 服务器验证,请输入一个登录 ID 和密码,然后单击"下一步"。在"创建 SQL Server 的新数据源"对话框中,设置默认数据库、存储过程设置的驱动程序和 ANSI 标识,然后单击"下一步"。(要获取详细信息,请单击"帮助"。)在对话框(同样名为"创建 SQL Server 的新数据源")中,选择一种字符转换方法,然后单击"下一步"。(详细信息,请单击"帮助"。)在下一个对话框(同样名为"创建 SQL Server 的新数据源")中,选择登录设置。 注意典型情况下, 您只能使用日志来调试数据库访问问题。 在"ODBC Microsoft SQL Server 安装程序"对话框中,单击"测试数据源"。如果 DSN 正确创建,"测试结果"对话框将指出测试成功完成。
2、编写脚本和数据库源建立连接
ADO(ActiveX Data Objects ) 提供 Connection 对象,可以使用该对象建立和管理应用程序和 ODBC 数据库之间的连接。Connection 对象具有各种属性和方法,可以使用它们打开和关闭数据库连接。编写数据库连接脚本,首先应创建 Connection 对象的实例,接着打开数据库连接:
下面是通过数据源连接数据库的代码,为了数据库的安全起见,我们在Golbal.asa文件里写连接代码,然后在页面上调用。本例中,DSN数据源为数据源sjy。
Sub Application_onStart
Application("ConnectDataSourceString")="DSN=sjy;UID=sa;PWD=;"
Sub Application_onEnd
End sub
在ASP页面上调用
<%
Dim conn,strconn
Set conn= Server.CreateObjec(“ADODB.Connection”)
Conn.open Application("ConnectDataSourceString")
%>
三、通过oledb建立连接
运用oledb方法建立页面与数据库的连接, 不需要创建 ODBC DSN数据源,直接编写如下的脚本和数据源建立连接,是一种简单易用的方法。
四、通过driver建立连接
通过driver建立页面与数据库的连接,同样不需要创建ODBC DSN数据源,但必须知道实际的数据库文件路径或者数据源名(例如,SQLserver的数据库)。
jsp怎么实现普通用户与管理员登陆到不同界面,代码怎么写?
是啊,这个东西给你提供代码不现实,只能提供思路。就是你做两个页面,一个管理员页面,一个普通用户页面,在用户登录时,当用户输入帐号密码等信息后,点击“登录”,然后数据就会提交到后台,在后台那里判断是普通用户还是管理员,然后根据不同的用户类型让它跳转到不同的页面就行了,很简单,一个If()else()就可以判断搞定了。