利用instr函数防止SQL注入攻击

时间:2022-04-29 11:35:28 其他范文 收藏本文 下载本文

“我的树洞”为你分享5篇“利用instr函数防止SQL注入攻击”,经本站小编整理后发布,但愿对你的工作、学习、生活带来方便。

利用instr函数防止SQL注入攻击

篇1:利用instr函数防止SQL注入攻击

出处: 天极BLOG

学asp也有一段时间了,这几天一直在写自己的程序,也遇到了好多问题,我就不得不得考虑到一些现在的漏洞,比如,‘ 或 and 1=1等等的一些漏洞!别的先不管,今天我就来说说如何堵这个漏洞!

记得看了一篇文章(不记得什么时候看的了),他用到了instr这个函数,具体的应该是这样的,

If instr(Request(“id”),“ ”)>0 or instr(Request(“id”),“'”)>0 then response.redirect “index.asp”

当然,也也可以在then后面写你想要的!这个先不管!

让我们先来学习instr这个函数吧:

语法

InStr([start, ]string1, string2[, compare])

InStr 函数的语法有以下参数:

参数描述start可选。数值表达式,用于设置每次搜索的开始位置。如果省略,将从第一个字符的位置开始搜索。如果 start 包含 Null,则会出现错误。如果已指定 compare,则必须要有 start 参数。String1必选。接受搜索的字符串表达式。String2

必选。要搜索的字符串表达式。Compare可选。指示在计算子字符串时使用的比较类型的数值。有关数值,请参阅“设置”部分。如果省略,将执行二进制比较。

compare 参数可以有以下值:

常数 值 描述

vbBinaryCompare 0 执行二进制比较。

vbTextCompare 1 执行文本比较。

[返回值]

InStr 函数返回以下值:

如果 InStr 返回

string1 为零长度 0

string1 为 Null Null

string2 为零长度 start

string2 为 Null Null

string2 没有找到 0

在 string1 中找到 string2 找到匹配字符串的位置

start > Len(string2) 0

下面的示例利用 InStr 搜索字符串:

Dim SearchString, SearchChar, MyPos

SearchString =“XXpXXpXXPXXP” ' 要在其中搜索的字符串,

SearchChar = “P” ' 搜索 “P”。

MyPos = Instr(4, SearchString, SearchChar, 1) '文本比较从第四个字符开始返回 6。

MyPos = Instr(1, SearchString, SearchChar, 0) '二进制比较从第1个字符开始返回 9。

MyPos = Instr(SearchString, SearchChar) ' 返回 9。

' 缺省为二进制比较(最后一个参数省略)。

MyPos = Instr(1, SearchString, “W”) ' 二进制比较从第1个字符开始返回 0 (没有找到 “W”)。

注意 InStrB 函数使用包含在字符串中的字节数据,所以 InStrB 返回的不是一个字符串在另一个字符串中第一次出现的字符位置,而是字节位置。

总结概括:instr的功能就是: 返回字符或字符串在另一个字符串中第一次出现的位置,好了,让我们在看看哪个代码:

if instr(Request(“id”),“ ”)>0 or instr(Request(“id”),“'”)>0 then

含义:比较 字符(空格)与字符(')在request(“id”)中的具体位置(进行二进制制比较),假如找到了(空格)与(‘)字符,那么就是then 后的语句!

现在大家理解这个含义了吧!

当我看第一眼的时候我就说,假如在asp?Id=90加上字符(;或,)等等一些字符时不是造样出错吗?(是,回答的肯定的:)

估计又有人说,那我会在if instr(Request(“id”),“ ”)>0 or instr(Request(“id”),“'”)>0 then 语句中在加些字符,比如改为:if instr(Request(“id”),“ ”)>0 or instr(Request(“id”),“'”)>0 or instr(Request(“id”),“;”)>0 or instr(Request(“id”),“, ”)>0 then

等等,你还可以在后面加,呵呵!(这个好啊!不过比较烂:)

是,这样加上后,确实能桃过一些所谓的 们的手的!

其实没必要,大家忘了instr(Request(“id”),“ ”)>0这句话了吗,他还和(空格)比较了啊!只要有这句话,那些所谓的 们的,and 1 = 1 不就没用了吗?

篇2:如何防止sql注入攻击网站

防御SQL注入有妙法

第一步:很多新手从网上下载SQL通用防注入系统的程序,在需要防范注入的页面头部用来防止别人进行手动注入测试,

如何防止sql注入攻击网站

。可是如果通过SQL注入分析器就可轻松跳过防注入系统并自动分析其注入点。然后只需要几分钟,你的管理员账号及密码就会被分析出来。

第二步:对于注入分析器的防范,笔者通过实验,发现了一种简单有效的防范方法。首先我们要知道SQL注入分析器是如何工作的。在操作过程中,发现软件并不是冲着“admin”管理员账号去的,而是冲着权限(如flag=1)去的。这样一来,无论你的管理员账号怎么变都无法逃过检测。

第三步:既然无法逃过检测,那我们就做两个账号,一个是普通的管理员账号,一个是防止注入的账号,为什么这么说呢?笔者想,如果找一个权限最大的账号制造假象,吸引软件的检测,而这个账号里的内容是大于千字以上的中文字符,就会迫使软件对这个账号进行分析的时候进入全负荷状态甚至资源耗尽而死机,下面我们就来修改数据库吧。

1.对表结构进行修改。将管理员的账号字段的数据类型进行修改,文本型改成最大字段255(其实也够了,如果还想做得再大点,可以选择备注型),密码的字段也进行相同设置。

2.对表进行修改。设置管理员权限的账号放在ID1,并输入大量中文字符(最好大于100个字)。

3.把真正的管理员密码放在ID2后的任何一个位置(如放在ID549上)。

我们通过上面的三步完成了对数据库的修改。

这时是不是修改结束了呢?其实不然,要明白你做的ID1账号其实也是真正有权限的账号,现在计算机处理速度那么快,要是遇上个一定要将它算出来的软件,这也是不安全的。我想这时大多数人已经想到了办法,对,只要在管理员登录的页面文件中写入字符限制就行了!就算对方使用这个有上千字符的账号密码也会被挡住的,而真正的密码则可以不受限制。

篇3:什么是SQL注入攻击

SQL注入攻击是 对数据库进行攻击的常用手段之一,

什么是SQL注入攻击

随着B/S模式应用开发的发展,使用这种模式编写应用程序的程序员也越来越多。但是由于程序员的水平及经验也参差不齐,相当大一部分程序员在编写代码的时候,没有对用户输入数据的合法性进行判断,使应用程

篇4:PHP如何防止SQL注入

PHP如何防止SQL注入

一、 引言

PHP是一种力量强大但相当容易学习的服务器端脚本语言,即使是经验不多的程序员也能够使用它来创建复杂的动态的web站点,然而,它在实现因特网服务的秘密和安全方面却常常存在许多困难。在本系列文章中,我们将向读者介绍进行web开发所必需的安全背景以及PHP特定的知识和代码-你可以借以保护你自己的web应用程序的安全性和一致性。首先,我们简单地回顾一下服务器安全问题-展示你如何存取一个共享宿主环境下的私人信息,使开发者脱离开生产服务器,维持最新的软件,提供加密的频道,并且控制对你的系统的存取。

然后,我们讨论PHP脚本实现中的普遍存在的脆弱性。我们将解释如何保护你的脚本免于SQL注入,防止跨站点脚本化和远程执行,并且阻止对临时文件及会话的”劫持”。

在最后一篇中,我们将实现一个安全的Web应用程序。你将学习如何验证用户身份,授权并跟踪应用程序使用,避免数据损失,安全地执行高风险性的系统命令,并能够安全地使用web服务。无论你是否有足够的PHP安全开发经验,本系列文章都会提供丰富的信息来帮助你构建更为安全的在线应用程序。

二、 什么是SQL注入

如果你打算永远不使用某些数据的话,那么把它们存储于一个数据库是毫无意义的;因为数据库的设计目的是为了方便地存取和操作数据库中的数据。但是,如果只是简单地这样做则有可能会导致潜在的灾难。这种情况并不主要是因为你自己可能偶然删除数据库中的一切;而是因为,当你试图完成某项”无辜”的任务时,你有可能被某些人所”劫持”-使用他自己的破坏性数据来取代你自己的数据。我们称这种取代为”注入”。

其实,每当你要求用户输入构造一个数据库查询,你是在允许该用户参与构建一个存取数据库服务器的命令。一位友好的用户可能对实现这样的操作感觉很满意;然而,一位恶意的用户将会试图发现一种方法来扭曲该命令,从而导致该被的扭曲命令删除数据,甚至做出更为危险的事情。作为一个程序员,你的任务是寻找一种方法来避免这样的恶意攻击。

三、 SQL注入工作原理

构造一个数据库查询是一个非常直接的过程。典型地,它会遵循如下思路来实现。仅为说明问题,我们将假定你有一个葡萄酒数据库表格”wines”,其中有一个字段为”variety”(即葡萄酒类型):

1. 提供一个表单-允许用户提交某些要搜索的内容,

让我们假定用户选择搜索类型为”lagrein”的葡萄酒。

2. 检索该用户的搜索术语,并且保存它-通过把它赋给一个如下所示的变量来实现:

$variety = $_POST['variety'];

因此,变量$variety的值现在为:

lagrein

3. 然后,使用该变量在WHERE子句中构造一个数据库查询:

$query = “SELECT * FROM wines WHERE variety=’$variety’”;

所以,变量$query的值现在如下所示:

SELECT * FROM wines WHERE variety=’lagrein’

4. 把该查询提交给MySQL服务器。

5. MySQL返回wines表格中的所有记录-其中,字段variety的值为”lagrein”。

到目前为止,这应该是一个你所熟悉的而且是非常轻松的过程。遗憾的是,有时我们所熟悉并感到舒适的过程却容易导致我们产生自满情绪。现在,让我们再重新分析一下刚才构建的查询。

1. 你创建的'这个查询的固定部分以一个单引号结束,你将使用它来描述变量值的开始:

$query = ” SELECT * FROM wines WHERE variety = ‘”;

2. 使用原有的固定不变的部分与包含用户提交的变量的值:

$query .= $variety;

3. 然后,你使用另一个单引号来连接此结果-描述该变量值的结束:

$ query .= “‘”;

于是,$query的值如下所示:

SELECT * FROM wines WHERE variety = ‘lagrein’

这个构造的成功依赖用户的输入。在本文示例中,你正在使用单个单词(也可能是一组单词)来指明一种葡萄酒类型。因此,该查询的构建是无任何问题的,并且结果也会是你所期望的-一个葡萄酒类型为”lagrein”的葡萄酒列表。现在,让我们想象,既然你的用户不是输入一个简单的类型为”lagrein”的葡萄酒类型,而是输入了下列内容(注意包括其中的两个标点符号):

lagrein’ or 1=1;

篇5:网站如何防止SQL注入

网站后台验证相当重要,特别是一些网站后台权限很大的网站,如果你拿到一个网站的后台管理员帐号,基本上已经拿下这个网站,然后通过上传木马什么的拿到服务器权限。

一提到绕过后台登陆验证直接进入网站后台管理系统,想必大家都能想到经典的万能密码:or =or 吧

or =or 原理

我们都知道后台登陆验证一般的方式都是 将用户在登录口输入的账号密码拿去与数据库中的记录做验证,并且要求输入的账号密码要等于数据库中某条记录的账号密码,验证通过则程序就会给用户一个 sssion,然后进入后台,否则就返回到登陆口。而对于or =or 漏洞,我们先来看以下代码:

<%

pwd = request.form(“pwd”) 获取用户输入的密码,再把值赋给pwd

name = request.form(“name”) 获取用户输入的用户名再把值赋给name

都没有进行任何过滤

Set rs = Server.Createob ject(“ADODB.Connection”)

sql = “select * from Manage_User where UserName=” & name & “ And PassWord=”&encrypt(pwd)&“” 将用户名和密码放入查询语句中查询数据库,

Set rs = conn.Execute(sql) 执行SQL语句,执行后并得到rs对象结果,“真”或“假”

If Not rs.EOF = True Then 如果是真则执行以下代码

Session(“Name”) = rs(“UserName”) 将UserName的属性赋给Name的Session自定义变量

Session(“pwd”) = rs(“PassWord”) 将PassWord的属性赋给pwd的Session自定义变量

Response.Redirect(“Manage.asp”)了 利用Response对象的Redirect方法重定向Manage.asp

Else 否则执行以下代码

Response.Redirect “Loginsb.asp?msg=您输入了错误的帐号或口令,请再次输入!”

End If

%>

针对以上例子我们只需要在用户名处提交or =or ,这样就使得SQL语句变成:select * from Manage_User where UserName=’or ‘=or And PassWord=123456。执行后得到rs对象的结果为真,这样就能顺利的进入后台了。

现在的目的就是使

sql = “select * from Manage_User where UserName=” & name & “ And PassWord=”&encrypt(pwd)&“”

这条语句执行为真,要达到这个目的就要用到我们的or 登陆,只要我们构造一个特殊的用户名,就可以绕过程序的验证,直接达到后台。之所以有or 登陆就是因为前面的用户名过滤不严格导致的。在上面的后台登陆代码中我们只要在用户名处输入1′ or 1=1 or ‘1′=’1,密码处我输入123,其实随便输入什么符号都可以,点击登陆就进入后台了。

上面输入的数据达到我们服务器后就要执行SQL查询语句了,这个时候那条SQL查询语句就变成了:sql = “select * from Manage_User where UserName=‘” 1′ or 1=1 or ‘1′=’1′and password=’123′”,

注意,第一个单引号是为了跟UserName=‘后的单引号闭合从而构造or 运算,这样跟name配对的单引号还需一个单引号才能闭合,所以有了‘1‘=‘1。这就相当于将name=‘‘变成了name=‘ 1‘or ‘1‘=‘1 ‘。

所以我们在用户名处输入’1′ or 1=1 or ‘1′=’1′,密码输入任何字符之后,我们的SQL查询语句的结果为真了。

SQL注入防范方法

为了避免出现这个漏洞,现在基本上的后台验证都不会使用这类方式,而是取得用户输入的账号和密码,在SQL中先将用户名与数据库中的记录做对比,若 数据库中某条记录的用户名等于用户输入的用户名,则取出该条记录中的密码,然后再与用户输入的密码对比,正确就通过,不正确就返回。例如

<%

pwd = request.form(“pwd”) 获取用户输入的密码,再把值赋给pwd

name = request.form(“name”) 获取用户输入的用户名再把值赋给name

都没有进行任何过滤

Set rs = Server.Createob ject(“ADODB.Connection”)

sql = “select * from Manage_User where UserName=” & name & “” 将用户名和密码放入查询语句中查询数据库,

Set rs = conn.Execute(sql) 执行SQL语句,执行后并得到rs对象结果,“真”或“假”

If Not rs.EOF = True Then 如果是真则执行以下代码

password=rs(“password”) 取得密码数据

if password=md5(pwd) then

Session(“Name”) = rs(“UserName”) 将UserName的属性赋给Name的Session自定义变量

Session(“pwd”) = rs(“PassWord”) 将PassWord的属性赋给pwd的Session自定义变量

Response.Redirect(“Manage.asp”)了 利用Response对象的Redirect方法重定向Manage.asp

else

response.write “密码错误!!!!”

end if

Else 否则执行以下代码

Response.Redirect “Loginsb.asp?msg=您输入了错误的帐号或口令,请再次输入!”

End If

%>

通过以上例子可知道,密码的验证不再是直接在SQL语句中做验证了,而是根据用户名,取出对应的密码,然后再与用户输入的做对比。这样一来就造成了 我们不能使用or =or 绕过了。有的朋友在这里可能有疑问了,若我们提交or =or 那么SQL语句就变成:

select * from Manage_User where UserName=or =or ,

这样一来得到的结果也应该是真啊,为什么就不能绕过呢?

其实就算SQL查询的地方得到的值是真,可别忘了后面还有密码的验证,若我们提交以上SQL,得到账号是真的,那么后面根据账号去数据库中取出来的密码与用户提交的密码是绝对通不过的。

好了,对于or =or 漏洞的分析先就暂且说到这里,以上的均为我个人对该漏洞的理解,并不代表就是完全正确的,若有不当的地方还望大家多多指教。

phpfusion的一个Xday分析脚本安全

Geeklog SECauthenticate函数SQL注入漏洞

一个防注入的小白错误千博企业程序漏洞预警

waf绕过:mysql注入waf绕过技巧脚本安全

如何防范网站数据库入侵

Oracle SQL精妙SQL语句讲解

突破一流信息监控系统传木马并获得系统权限

计算机二级access练习题

oblog?4.6?注入的语句

CMSZERO企业网站管理系统功能介绍

利用instr函数防止SQL注入攻击
《利用instr函数防止SQL注入攻击.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

【利用instr函数防止SQL注入攻击(精选5篇)】相关文章:

用一个实例讲解Oracle数据库的PL/SQL语句块2022-10-30

帝国CMS 留言本多字节漏洞漏洞预警2023-04-15

如何恢复MYSQL实体文件MYI,MYD到数据库中数据库教程2022-05-04

确保PHP应用程序的安全[2]WEB安全2022-04-30

ideacms文章管理系统漏洞及修复2022-12-21

ACCESS数据库中Field对象的caption属性读写数据库教程2023-06-16

由于Nginx漏洞导致的入侵事件WEB安全2023-08-17

securytas.ro sql 注入2022-05-07

闪存博客SQL注入脚本安全2023-09-01

DB2数据库SQL注入语句2023-04-15

点击下载本文文档