sql注入
首先我想谢谢园子的朋友们,是你们提醒我写内容有错误,记得曾经电子商务之数据存储流程(五)里面说到“选存储过程+传递参数用SqlParameter是因为,除非是ADO.NET有漏洞,那么就绝对不会发生SQL注入”。Keep Walking大哥也在关于防止sql注入的几种手段(二)中举出来一个例子说明我说的上句话是错误的。说实话当时我还是对SQL注入不是很了解,也没有遇到过SQL注入,也不是很关心它。但是我想安全的问题我们一定要非常注意,于是这些时候花了一些时间来学习了SQL注入。
什么是SQL注入
可能大家还不是对SQL注入这个概念不是很清楚,简单地说,SQL注入就是攻击者通过正常的WEB页面,把自己SQL代码传入到应用程序中,从而通过执行非程序员预期的SQL代码,达到窃取数据或破坏的目的。
当应用程序使用输入内容来构造动态SQL语句以访问数据库时,会发生SQL注入攻击。如果代码使用存储过程,而这些存储过程作为包含未筛选的用户输入的字符串来传递,也会发生SQL注入。SQL注入可能导致攻击者使用应用程序登陆在数据库中执行命令。如果应用程序使用特权过高的帐户连接到数据库,这种问题会变得很严重。在某些表单中,用户输入的内容直接用来构造(或者影响)动态SQL命令,或者作为存储过程的输入参数,这些表单特别容易受到SQL注入的攻击。而许多网站程序在编写时,没有对用户输入的合法性进行判断或者程序中本身的变量处理不当,使应用程序存在安全隐患。这样,用户就可以提交一段数据库查询的代码,根据程序返回的结果,获得一些敏感的信息或者控制整个服务器,于是SQL注入就发生了。
一般SQL注入
在Web 应用程序的登录验证程序中,一般有用户名(username) 和密码(password) 两个参数,程序会通过用户所提交输入的用户名和密码来执行授权操作。我们有很多人喜欢将SQL语句拼接起来。例如:
Select * from users where username =’ txtusername.Text ’ and password =’ txtpassword.Text ’
其原理是通过查找users 表中的用户名(username) 和密码(password) 的结果来进行授权访问, 在txtusername.Text为mysql,txtpassword.Text为mary,那么SQL查询语句就为:
Select * from users where username =’ mysql ’ and password =’ mary ’
如果分别给txtusername.Text 和txtpassword.Text赋值’ or ‘1’ = ‘1’ --和ab
相关文档:
create PROCEDURE pagelist
@tablename nvarchar(50),
@fieldname nvarchar(50)='*',
@pagesize int output,--每页显示记录条数
@currentpage int output,--第几页
@orderid nvarchar(50),--主键排序
@sort int,--排序方式,1表示升序,0表示降序排列
......
<%
set conn=server.createobject("adodb.connection")
conn.connectionstring="PROVIDER=MSDASQL;DRIVER={SQL Server};SERVER=210.76.209.130;DATABASE=databasename;UID=sa;PWD=password;"
conn.open
%>
其中 210.76.209.130 就是远程服务器的IP
二、我用VB写了个管理软件,并采取PING远程服务器域名的 ......
使用SQL Server身份验证登录时报错:
无法连接到.\SQLEXPRESS.
Additional information:
用户'sa'登录失败。该用户与可信SQL Server 连接无关联。(microsoft SQL Server,Error:18452))
------------------
下面是映射时报的错:
创建对于用户“sa”失败。(microsoft.sqlServer.express.smo)
Additional ......
在计算机中数据有两种特征:类型和长度。所谓数据类型就是以数据的表现方式和存储方式来划分的数据的种类。在SQL Server 中每个变量、参数、表达式等都有数据类型。 其中,BIGINT、 SQL_VARIANT 和TABLE 是SQL Server 2000 中新增加的3 种数据类型.
一、 整数数据类型
&nb ......
帮助里的,语法:
BEGIN TRY
{ sql_statement | statement_block }
END TRY
BEGIN CATCH
[ { sql_statement | statement_block } ]
END CATCH
[ ; ]
异常部分:
在 CATCH 块的作用域内,可以使用以下系统函数来获取导致 CATCH 块执行的错误消息:
ERROR ......