当前位置:首页 » 编程语言 » 前端sql校验规则
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

前端sql校验规则

发布时间: 2022-11-02 19:05:43

A. sql语句如何判断字段是否为数字

sql语句判断字段是否为数字可以参考下面的例子:

select * from biao where isnumeric(zian)=0 查非数回字答

select * from biao where isnumeric(zian)=1 查纯数字

(1)前端sql校验规则扩展阅读:

SQL参考语句

查找:select * from table1 where field1 like ’%value1%’ (所有包含‘value1’这个模式的字符串)

排序:select * from table1 order by field1,field2 [desc]

求和:select sum(field1) as sumvalue from table1

平均:select avg(field1) as avgvalue from table1

B. 如何防范SQL注入漏洞及检测

以下是OMG我为大家收集整理的文章,希望对大家有所帮助。

SQL注入(SQLInjection)漏洞攻击是目前网上最流行最热门的黑客脚本攻击方法之一,那什么是SQL注入漏洞攻击呢?它是指黑客利用一些Web应用程序(如:网站、论坛、留言本、文章发布系统等)中某些存在不安全代码或SQL语句不缜密的页面,精心构造SQL语句,把非法的SQL语句指令转译到系统实际SQL语句中并执行它,以获取用户名、口令等敏感信息,从而达到控制主机服务器的攻击方法。

1. SQL注入漏洞攻击原理

1. 1 SQL注入漏洞攻击实现原理

SQL(Structured Query Language)是一种用来和数据库交互的语言文本。SQL注入的攻击原理就是攻击者通过Web应用程序利用SQL语句或字符串将非法的数据插入到服务器端数据库中,获取数据库的管理用户权限,然后将数据库管理用户权限提升至操作系统管理用户权限,控制服务器操作系统,获取重要信息及机密文件。

SQL注入漏洞攻击主要是通过借助于HDSI、NBSI和Domain等SQL注入漏洞扫描工具扫描出Web页面中存在的SQL注入漏洞,从而定位SQL注入点,通过执行非法的SQL语句或字符串达到入侵者想要的操作。下面以一段身份验证的.NET代码为例,说明一下SQL 注入攻击的实现方法。

SqlConnectionnwConn = new SqlConnection((string)ConfigurationSettings.AppSettings["DBconnStrings"]); string queryStr = "SELECT userid,userpwd, username,type FROM users where userid='" + Txtusername.Text +"'";

DataSet userSet = new DataSet();

SqlDataAdapter userAdapter = newSqlDataAdapter(queryStr, nwConn);

userAdapter.Fill(userSet, "Users");

Session["UserID"] =Txtusername.Text.ToString();

Session["type"] =type.Text.ToString();

Response.Redirect("/Myweb/admin/login.aspx");

从上面的代码中可以看出,程序在与数据库建立连接得到用户数据之后,直接将username的值通过session传给login.aspx,没有进行任何的过滤和处理措施, 直接用来构造SQL 语句, 其危险系数是非常高的, 攻击者只要根据SQL 语句的编写规则就可以绕过身份验证,从而达到入侵的目的。

1. 2 SQL注入漏洞攻击分析

SQL注入可以说是一种漏洞,也可以说是一种攻击。当程序中的变量处理不当,没有对用户提交的数据类型进行校验,编写不安全的代码,构造非法的SQL语句或字符串,都可能产生这个漏洞。

例如Web系统有一个login页面,这个login页面控制着用户是否有权访问,要求用户输入一个用户名和口令,连接数据库的语句为:

“select * from users where username = 'username' andpassword = 'password'”

攻击者输入用户名为aa or 1=1口令为1234 or 1=1之类的内容。我们可以看出实际上攻击者并不知道真正的用户名、口令,该内容提交给服务器之后,服务器执行攻击者构造出的SQL命令,但由于攻击者输入的内容非常特殊,所以最后得到的SQL命令变成:

“select * from users where username = 'aa' or 1=1 andpassword = '1234' or 1=1”

服务器执行查询或存储过程,将用户输入的身份信息和数据库users表中真实的身份信息进行核对,由于SQL命令实际上已被修改,存在永远成立的1=1条件,因此已经不能真正验证用户身份,所以系统会错误地授权攻击者访问。

SQL 注入是通过目标服务器的80端口进行的,是正常的Web访问,防火墙不会对这种攻击发出警告或拦截。当Web服务器以普通用户的身份访问数据库时,利用SQL注入漏洞就可能进行创建、删除、修改数据库中所有数据的非法操作。而当数据库以管理用户权限的身份进行登录时,就可能控制整个数据库服务器。

SQL注入的方法很多,在以手动方式进行攻击时需要构造各种各样的SQL语句,所以一般攻击者需要丰富的经验和耐心,才能绕过检测和处理,提交语句,从而获得想要的有用信息。这个过程需要花费很多的时间,如果以这种手动方式进行SQL注入漏洞攻击,许多存在SQL注入漏洞的ASP、JSP、PHP、JAVA等网站就会安全很多了,不是漏洞不存在了,而是手动入侵者需要编程基础,但现在攻击者可以利用一些现成的黑客工具来辅助SQL注入漏洞攻击,加快入侵的速度,使SQL注入变得轻而易举。

由于SQL注入漏洞攻击利用的是通用的SQL语法,使得这种攻击具有广泛性。理论上说,对于所有基于SQL语言的数据库管理系统都是有效的,包括MSSQLServer、Oracle、DB2、Sybase和MySQL等。当然,各种系统自身的SQL扩展功能会有所不同,因此最终的攻击代码可能不尽相同。

1. 3 SQL注入漏洞攻击过程

(1)绕过身份验证

如一个login界面,需要输入用户名和口令,然后Post到另一个页面,进行身份验证,因此攻击者只需在用户名和口令的输入框中都输入aa or’1’=’1’的内容,那么攻击者就可以通过欺骗的验证方式而直接进入下一个页面,并拥有和正常登录用户一样的全部特权。原因是什么呢? 我们比较一下正常用户登录和攻击者登录时的两种SQL语句:

1)正常用户(如用户名为admin,口令为1234567) :

SQL= " selectfrom users where username = ’admin’and password= ’1234567’ ";

2)攻击者(用户名和口令都为aa or’1’=’1’) :

SQL= " select * from users where username='aa or’1’=’1’'and password = ' aa or’1’=’1’'";

可以看到由and连接的两个条件都被一个永远成立的1=1所代替,执行的结果为true,数据库会认为条件恒成立,会返回一个true,让攻击者以合法身份登录进入下一个页面。

(2)执行非法操作

如一个查询页面select1.asp? id=1,编程人员原本设计意图是显示id为1的查询信息,而攻击者利用程序中没有对id内容进行检查的机制,插入自己的代码。

从select1.asp中摘录一段关键代码:

SQL= " select *from photo where photoid= 'id'";

可以看到,id没有进行任何的处理,直接构成SQL语句并执行,而攻击者在知道该系统数据库中表名及字段名的情况下,利用SQL语句特性(分号是将两句SQL 语句分开的符号),直接向数据库Tuser表中添加记录:

select1.asp? id= 1;Insertinto Tuser (username,password,type) values ('hack','1234567','管理员'),然后攻击者就可以直接用hack进行登录了。通过这样的方法,攻击者还可以对系统做任何的事情,包括添加、删除、修改系统资源的操作。

(3)执行系统命令

如果Web主机使用MSSQL数据库管理系统,那么攻击者就可以用到xp_cmdshell这个扩展存储过程,xp_cmdshell是一个非常有用的扩展存储过程,用于执行系统命令,比如dir、net等,攻击者可以根据程序的不同,提交不同的语句:

execmaster.dbo.xp_cmdshell " dir "; exec master.dbo.xp_cmdshell" net user hack 1234567 /add ";

execmaster.dbo.xp_cmdshell " net localgroup administrators hack /add ";

这样就可以向Web主机系统中成功添加了一个管理员帐户。

2. SQL注入漏洞攻击的检测方式及方法

2. 1检测方式

SQL注入漏洞攻击检测分为入侵前的检测和入侵后的检测。入侵前的检测,可以通过手工方式,也可以使用SQL注入漏洞扫描工具软件。检测的目的是为预防SQL注入漏洞攻击,而对于SQL注入漏洞攻击后的检测,主要是针对审计日志的查看,SQL注入漏洞攻击成功后,会在Web Service和数据库的审计日志中留下“痕迹”。

2. 2检测方法

(1)动态SQL检查

动态的SQL语句是一个进行数据库查询的强大的工具,但把它和用户输入混合在一起就使SQL注入成为了可能。将动态的SQL语句替换成预编译的SQL或者存储过程对大多数应用程序是可行的。预编译的SQL或者存储过程可以将用户的输入作为参数而不是命令来执行,这样就限制了入侵者的行动。当然,它不适用于存储过程中利用用户输入来生成SQL命令的情况。在这种情况下,用户输入的SQL命令仍可能得到执行,数据库仍然存在SQL注入漏洞攻击的危险。

(2)有效性校验

如果一个输入框只可能包括数字,那么要通过验证确保用户输入的都是数字。如果可以接受字母,检查是不是存在不可接受的字符,那就需要设置字符串检查功能。确保应用程序要检查以下字符:分号、等号、破折号、括号以及SQL关键字。

(3)数据表检查

使用SQL注入漏洞攻击工具软件进行SQL注入漏洞攻击后,都会在数据库中生成一些临时表。通过查看数据库中最近新建的表的结构和内容,可以判断是否曾经发生过SQL注入漏洞攻击。

(4)审计日志检查

在Web服务器中如果启用了审计日志功能,则Web Service审计日志会记录访问者的IP地址、访问时间、访问文件等信息,SQL注入漏洞攻击往往会大量访问某一个页面文件(存在SQL注入点的动态网页),审计日志文件会急剧增加,通过查看审计日志文件的大小以及审计日志文件中的内容,可以判断是否发生过SQL注入漏洞攻击事件;另外还可以通过查看数据库审计日志,查询某个时间段是否有非法的插入、修改、删除操作。

(5)其他

SQL注入漏洞攻击成功后,入侵者往往会添加特权用户(如:administrator、root、sa等)、开放非法的远程服务以及安装木马后门程序等,可以通过查看用户帐户列表、远程服务开启情况、系统最近日期产生的一些文件等信息来判断是否发生过入侵。

3. SQL注入漏洞防范措施

SQL注入漏洞攻击的防范方法有很多种,现阶段总结起来有以下方法:

(1)数据有效性校验。如果一个输入框只可能包括数字,那么要通过校验确保用户输入的都是数字。如果可以接受字母,那就要检查是不是存在不可接受的字符,最好的方法是增加字符复杂度自动验证功能。确保应用程序要检查以下字符:分号、等号、破折号、括号以及SQL关键字。另外限制表单数据输入和查询字符串输入的长度也是一个好方法。如果用户的登录名最多只有10个字符,那么不要认可表单中输入10个以上的字符,这将大大增加攻击者在SQL命令中插入有害代码的难度。

(2)封装数据信息。对客户端提交的数据进行封装,不要将数据直接存入cookie中,方法就是在编程的代码中,插入session、if、try、else,这样可以有效地防止攻击者获取cookie中的重要信息。

(3)去除代码中的敏感信息。将在代码中存在的用户名、口令信息等敏感字段删除,替换成输入框。

SQL=" select from users where username = ’admin’and password= ’1234567’ "

如:这样显然会暴露管理员的用户名、口令信息。可以将其修改成:

SQL= " select * from users where username='" +Txtuser.Text + "' and userpwd='" + Textpwd.Text + "'"

这样就安全了很多,入侵者也是不会轻易的就获取到用户名、口令信息。

(4)替换或删除单引号。使用双引号替换掉所有用户输入的单引号,这个简单的预防措施将在很大程度上预防SQL注入漏洞攻击,单引号时常会无法约束插入数据的Value,可能给予输入者不必要的权限。用双引号替换掉单引号可以使大部分SQL注入漏洞攻击失败。 如:

“select* from users where username='" + admin + "' and userpwd='" + 1234567+ "'”

显然会得到与

“select * from users where username='admin' and password= '1234567'”

相同的结果。

(5)指定错误返回页面。攻击者有时从客户端尝试提交有害代码和攻击字符串,根据Web Service给出的错误提示信息来收集程序及服务器的信息,从而获取想得到的资料。应在Web Service中指定一个不包含任何信息的错误提示页面。

(6)限制SQL字符串连接的配置文件。使用SQL变量,因为变量不是可以执行的脚本,即在Web页面中将连接数据库的SQL字符串替换成指定的Value,然后将Web.config文件进行加密,拒绝访问。

(7)设置Web目录的访问权限。将虚拟站点的文件目录禁止游客用户(如:Guest用户等)访问,将User用户权限修改成只读权限,切勿将管理权限的用户添加到访问列表。

(8)最小服务原则。Web服务器应以最小权限进行配置,只提供Web服务,这样可以有效地阻止系统的危险命令,如ftp、cmd、vbscript等。

(9)鉴别信息加密存储。将保存在数据库users表中的用户名、口令信息以密文形式保存,也可以对users表进行加密处理,这样可以大大增加对鉴别信息访问的安全级别。

(10)用户权限分离。应尽可能的禁止或删除数据库中sa权限用户的访问,对不同的数据库划分不同的用户权限,这样不同的用户只能对授权给自己的数据库执行查询、插入、更新、删除操作,就可以防止不同用户对非授权的数据库进行访问。

4. 结束语

SQL注入漏洞攻击在网上非常普遍,许多ASP、PHP论坛和文章管理系统、下载系统以及新闻系统都存在这个漏洞。造成SQL注入漏洞攻击的主要原因是开发人员在系统开发的过程中编程不规范,没有形成良好的编程习惯,问题的解决只有依赖于规范编程。此外,也可以使用现有的SQL注入漏洞扫描器对整个网站中的关键代码进行扫描,查找网站页面中存在的SQL注入点。对于有问题的页面,可以及时删除或更新。本文通过对SQL注入漏洞攻击的方法、原理以及攻击实施过程进行了阐述和总结,并给出了一些常见的SQL注入漏洞攻击防范的方法。

C. 扫描发现一个SQL注入,请问如何验证这个注入,请给我详细过程,谢谢,好的话还可以加分

扫描是如何进行的,验证是否存在也是一样的!

扫描是用某一地址后加上了and 1=1取得的结果进行与and 1=2取得的结果进行比较而确认存在的!有时直接可以对and 1=2进行分析.如果内容没有显示完或是显示有部分错误时,一般会报数据库错误!可以知道这存在一个SQL 注入的!

然后就是直接的注入了!以手动为例,第一步猜表名:使用(select count(*) from admin)>0将语句中的1=2代替,查看反回结果,若是与1=2的界面一样出现错误或是显示不完全,则说明不存在admin表,一步一步到试表名,常用的一般是admin,administrator,manager等表名的!

第二步从猜到的表名中猜列名
(select count(*) from admin where len(username)>=1)>0
如果显示完全则表明存在username列名,当然还要猜一个密码的列名,一个是user,username之类,密码是password之类.

第三步,从猜到的表名或列名中猜管理员的名称.
如果是论坛的形式,有些设计上有不好的地方,就是管理员在论坛中发言的那个名称往往就是管理员的名称,因为图省事,发言所用的昵称与登陆所用的用户名是同一个.如果是,则好办,否则也是猜的!
一般我会找一个最长的管理员名称猜或者先猜出长度!如:len(username)>=5时正常,而大于等于6时出错!那么长度一定是5位!
然后用
(select count(*) from admin where len(username)=5 and left(username,1)>='a')>0
出错则第一个字符小于a,根据字符的编码去猜吧,可以找到猜到left(username,1)>="A"时正常,而>="B"时不正常.那么第一个字符就是"A",直到5个都猜完,比如得到"Admin"就知道了其用户名!

第四步猜密码:
(select count(*) from admin where username ='Admin' and left(password,1)>='a')>0
同样的方式可以猜到密码,最好先猜一下密码长度,如果是16位或是32位时往往使用了MD5加密,猜到的是加密过的字符而不是真正的密码!

第五步,其实第五步也是提前确认的,不然我们作的都是无用功!找后台登陆页面.
在后台登陆,当然如果网站为了安全,使用了JS先对密码进行加密的话,可以让JS不运行或是下载页面进行改造,不让其加密你的密码,这时你可以在密码中直接输入第四步的MD5的值.如果密码是明文传播,也就是在服务器端进行校验时,只有将第四步得到的MD5匹配,不叫反解MD不能反解,但可以在网站上得到一个匹配,也就是说某一个密码可以生成同样的MD5值,那这个密码就可以用!当然,如果明文存在数据库中就更好玩了!直接输入吧!

第六步,进入后台后,添加管理员帐户!以后想怎么玩就怎么玩,要是一个不细心的网管,再不查一下后台的管理员,你想他的后果是什么?

第七步,可能吗?大部分的管理员不是弱智,所以第六步往往只是一个障眼法!因为添加管理员很容易被发现的!添加木马程序!或者写一个页面,这个页面的名字与地址你自己记好,然后隐藏,一般管理员都不会在意的!这个页面是显示其特定数据库的!你也想了显示哪个呢?肯定管理员了!

以后你也登陆,如果添加的帐户登陆不上,就调用那个隐藏的地址,显示出真正管理员的密码或是MD5值,同上边一样登陆进行!再建一个管理员迷惑他!

当然,如果数据库允许插入的话,也好玩!不必狂管理员的帐户与密码,直接使用insert into语句插入一个管理员和密码就可以了!但是由于admin表中除这两项外,还有不允许为空时我们要么再猜其他字段(这个很难),很难插入的!

如果是SQL数据库,而他们开的恰恰又是sa帐户的话,好玩的事更多了!因为sa的权限很大,直接可以从系统表中查询各个表的名称等,

这只是手动的一个例子,做为新手可以实现注入.但记着不要给人家网站添麻烦,都不容易!

D. 在TaskBuilder里怎么实现前端数据校验

一些简单的校验可以通过设置表单组件的相应属性来实现,例如是否是必填项,如果设置为必填,则在表单提交时会自动验证必填项是否为空,如果有更复杂的校验规则,则需要在表单的提交事件处理函数内编写脚本进行判断。

E. sql中如何校验日期字段类型

在表设计时候,数据类型设置为datetime就好了,输入错误时候系统自己弹出对话框提示的

F. SQL语言的checksum函数校验的是什么

研究了一下
checksum意思是和校验,与hash又有关
实验
declare @a int
declare @b int
set @a=6
set @b=31
select checksum(@a,@b),checksum(@a)*16+checksum(@b),checksum(@a),checksum(@b)

当 @a=1 @b=32 时 checksum(@a,@b)=checksum(@a)*16+checksum(@b)
换几个参数发现有时候不等
再实验又发现 checksum(1,16)=0
推断 checksum(@a,@b)与checksum(@a),checksum(@b)
的16进制数有关 而却不只一两种算法

G. 在pl/sql中关于用sql语句校验的问题

创建一个名叫zcjs_upload的function函数,两个参数类型分别为numeric类型;
测试function函数的时候返回结果正确.当使用如上sql语句执行的时候返回结果错误.

H. 关于搜索框sql注入的问题,限制搜索框中只能输入数字是不是能防止sql注入

这是一种前端js校验的安全机制,在某种程度上是可以防止SQL注入的攻击。正所谓一切的输入都是罪恶的源泉,所以从输入源头尽量去规避一些风险是必要的。
但是在后端的程序中,也尽量使用成熟的框架,按照标准的开发规则去写代码,比如:不要使用${userName}这样的方式变量出现在访问数据库的SQL语句中。

I. 如何验证 SQL 语句的正确性

验证sql语句的正确性:

-- 定义你想要检验的SQL语句
DECLARE @sql NVARCHAR(MAX)
--'正确的语句'
SET @sql = 'select * from Report_Test1'
--'错误的语句'
--SET @sql = 'select 1 from'
DECLARE @testsql NVARCHAR(MAX),
@result INT

SET @testsql = N'set parseonly on; ' + @sql
EXEC @result = sp_executesql @testsql
-- 如果SQL语句有误,则@result不为0;
IF @result = 0
BEGIN
PRINT '正确的语法'
--开始执行正确的SQL语句
--exec sp_executesql @sql
END
ELSE
BEGIN
PRINT '错误的语法'
--不执行任何操作
END

J. 如何防范SQL注入漏洞及检测

SQL注入漏洞攻击的防范方法有很多种,现阶段总结起来有以下方法:
(1)数据有效性校验。如果一个输入框只可能包括数字,那么要通过校验确保用户输入的都是数字。如果可以接受字母,那就要检查是不是存在不可接受的字符,最好的方法是增加字符复杂度自动验证功能。确保应用程序要检查以下字符:分号、等号、破折号、括号以及SQL关键字。另外限制表单数据输入和查询字符串输入的长度也是一个好方法。如果用户的登录名最多只有10个字符,那么不要认可表单中输入10个以上的字符,这将大大增加攻击者在SQL命令中插入有害代码的难度。
(2)封装数据信息。对客户端提交的数据进行封装,不要将数据直接存入cookie中,方法就是在编程的代码中,插入session、if、try、else,这样可以有效地防止攻击者获取cookie中的重要信息。
(3)去除代码中的敏感信息。将在代码中存在的用户名、口令信息等敏感字段删除,替换成输入框。
SQL=" select from users where username = ’admin’and password= ’1234567’ "
如:这样显然会暴露管理员的用户名、口令信息。可以将其修改成:
SQL= " select * from users where username='" +Txtuser.Text + "' and userpwd='" + Textpwd.Text + "'"
这样就安全了很多,入侵者也是不会轻易的就获取到用户名、口令信息。
(4)替换或删除单引号。使用双引号替换掉所有用户输入的单引号,这个简单的预防措施将在很大程度上预防SQL注入漏洞攻击,单引号时常会无法约束插入数据的Value,可能给予输入者不必要的权限。用双引号替换掉单引号可以使大部分SQL注入漏洞攻击失败。 如:
“select* from users where username='" + admin + "' and userpwd='" + 1234567+ "'”
显然会得到与
“select * from users where username='admin' and password= '1234567'”
相同的结果。
(5)指定错误返回页面。攻击者有时从客户端尝试提交有害代码和攻击字符串,根据Web Service给出的错误提示信息来收集程序及服务器的信息,从而获取想得到的资料。应在Web Service中指定一个不包含任何信息的错误提示页面。
(6)限制SQL字符串连接的配置文件。使用SQL变量,因为变量不是可以执行的脚本,即在Web页面中将连接数据库的SQL字符串替换成指定的Value,然后将Web.config文件进行加密,拒绝访问。
(7)设置Web目录的访问权限。将虚拟站点的文件目录禁止游客用户(如:Guest用户等)访问,将User用户权限修改成只读权限,切勿将管理权限的用户添加到访问列表。
(8)最小服务原则。Web服务器应以最小权限进行配置,只提供Web服务,这样可以有效地阻止系统的危险命令,如ftp、cmd、vbscript等。
(9)鉴别信息加密存储。将保存在数据库users表中的用户名、口令信息以密文形式保存,也可以对users表进行加密处理,这样可以大大增加对鉴别信息访问的安全级别。
(10)用户权限分离。应尽可能的禁止或删除数据库中sa权限用户的访问,对不同的数据库划分不同的用户权限,这样不同的用户只能对授权给自己的数据库执行查询、插入、更新、删除操作,就可以防止不同用户对非授权的数据库进行访问。