关于留言板被非法代码注入问题

问题描述

大家好:我用ASP做的一个网站,其中有评论功能,提交按钮功能代码如下:ifrequest("action")="tijiao"thenifrequest("content")=""thenresponse.write"<SCRIPTlanguage=JavaScript>alert('请输入评论内容!');javascript:history.go(-1)</SCRIPT>"elsesql_F="insertintocomments(content,products_id,users_id,ip,adddata)values('"&request("content")&"','"&request("id")&"','"&Session("id")&"','"&Request.ServerVariables("Remote_HOST")&"','"&now()&"')"conn.execute(sql_F)response.write"<scriptlanguage='javascript'>"&chr(13)response.write"alert('发表成功,谢谢您的参与!');"&Chr(13)response.write"window.document.location.href='show.asp?id="&request("id")&"';"&Chr(13)response.write"</script>"&Chr(13)Response.Endendifendif不知道浏览网站的人使用什么代码,使我数据库中使我数据库中的数据users_id,ip,adddata全部不显示内容,显示如下图:[img=http://m394.mail.qq.com/cgi-bin/download?mailid=ZL1406kwPqrFMZS9G_yOizQF4Xcg0b&filename=2010-11-06_094732%BA%F3%CC%A8%CE%CA%CC%E2%BD%D8%CD%BC.png&sid=AAHvhyB1l75pTEsH&action=view][/img]我初步判断应该是非法代码或者是SQL注入,但是不知道怎么解决,请高手帮助。

解决方案

解决方案二:
你应当先判断一下Session("id")是不是有值,确保是登录用户。另外,你用拼串的方式当然避不开注入式攻击,还是用参数的方式吧。象你这个串,只要content中的值是',null,null,null;就可以了吧?
解决方案三:
修改代码参数化SQL
解决方案四:
后台显示如下:id评论人内容:发布时间:发布IP管理123HxjEK6查看|删除灰色的什么也看不见灰色的什么也看不见灰色的什么也看不见
解决方案五:
我试着输入',null,null,null提示我:非法操作!您的纪录已经被提交到公安局↓操作IP:211.*.*.21操作时间:2010-11-810:47:40操作页面:/index_new/show.asp提交方式:POST提交参数:content提交数据:',null,null,null;
解决方案六:
好象你的页面已经进行的防sql注入攻击。但从你贴的程序里看不出来,是不是使用了第三方sql注入攻击软件啊。对于你的程序,只能说,请在执行之前再次确认,是否已经正常获取到了要插入的值,另把sql记录一下,看下,最终用户执行的sql是什么样子的。特别是session("id"),你应当做页面对用户登录的确认的啊。还有Remote_HOST有时候反向获取不到用户主机名,应当用Remote_addr。还有你的这个第三方sql注入攻击软件很不友好啊,我估计是直接进行的单引号判断吧,什么程序吗!
解决方案七:
Replace替换关键字符?不懂ASP
解决方案八:
网上程序参考下'==========安全代码==========DimGetFlagRem(提交方式)DimErrorSqlRem(非法字符)DimRequestKeyRem(提交数据)DimForIRem(循环标记)ErrorSql="'~;~and~(~)~exec~update~count~*~%~<~>~chr~mid~master~truncate~char~declare"Rem(每个敏感字符或者词语请使用半角"~"格开)ErrorSql=Split(ErrorSql,"~")IfRequest.ServerVariables("REQUEST_METHOD")="GET"ThenGetFlag=TrueElseGetFlag=FalseEndIfIfGetFlagThenForEachRequestKeyInRequest.QueryStringForForI=0ToUBound(ErrorSql)IfInStr(LCase(Request.QueryString(RequestKey)),ErrorSql(ForI))<>0ThenCallinfoback("请不要使用特殊字符,例如英文单引号等!")EndIfNextNextElseForEachRequestKeyInRequest.FormForForI=0ToUBound(ErrorSql)IfInStr(LCase(Request.Form(RequestKey)),ErrorSql(ForI))<>0ThenCallinfoback("请不要使用特殊字符,例如英文单引号等!")EndIfNextNextEndIfSql_in="and|or|on|in|select|insert|update|delete|exec|declare|'"Sql=Split(Sql_in,"|")IfRequest.QueryString<>""ThenForEachSql_GetInRequest.QueryStringForSql_Data=0ToUBound(Sql)IfInStr(LCase(Request.QueryString(Sql_Get)),Sql(Sql_Data))<>0ThenCallinfoback("请不要尝试非法注入!")EndIfNextNextEndIfIfRequest.Form<>""ThenForEachSql_PostInRequest.FormForSql_Data=0ToUBound(Sql)IfInStr(LCase(Request.Form(Sql_Post)),Sql(Sql_Data))<>0ThenCallinfoback("请不要尝试非法注入!")EndIfNextNextEndIf

解决方案九:
直接把单引号Repleace为两个单引号
解决方案十:
这不是人工发的,是专门的群发软件发的,对于客户端的ip和ServerVariables("Remote_HOST")都可以很容易伪造的。解决办法:1。增加验证码,发一条留言必须输入一次验证码2、insertintocomments这种方法改成dimrs,sqlsetrs=server.createobject("adodb.recordset")sql="select*fromcommentswhereidisnull"rs.opensql,conn,1,3rs.addnewrs("content")=content'...其它的自己写rs.updaters.close
解决方案十一:
另外还得判断Session("id"),Request.ServerVariables("Remote_HOST")这3个内容是否合法的
解决方案十二:
引用10楼beyond_me21的回复:

另外还得判断Session("id"),Request.ServerVariables("Remote_HOST")这3个内容是否合法的

Request.ServerVariables("Remote_HOST")可以伪造,session("id")同时存在于客户端和服务器端,也可以伪造么?请教了。
解决方案十三:
写错了,sessionid同时存在于服务器端和客户端,而session("id")只存在于服务器端,也可以伪造么?请教了。
解决方案十四:
引用12楼hwbox的回复:

写错了,sessionid同时存在于服务器端和客户端,而session("id")只存在于服务器端,也可以伪造么?请教了。

session("id")不可以伪造,但是客户端可以禁止cookie,session是需要将SessionID存在客户端的cookie里的
解决方案十五:
上网上搜一个封装好的dll(返回规范html格式的类),在项目中去调用它,过滤掉危险字符
解决方案:
注意,这些垃圾信息是通过软件提交的而不是浏览器,这样它就没使用cookie了,所以这里的Session("id")就是null,
解决方案:
引用9楼beyond_me21的回复:

这不是人工发的,是专门的群发软件发的,对于客户端的ip和ServerVariables("Remote_HOST")都可以很容易伪造的。解决办法:1。增加验证码,发一条留言必须输入一次验证码2、insertintocomments这种方法改成dimrs,sqlsetrs=server.createobject("adodb.recordset")sql="selec……

谢谢啦
解决方案:
你的验证机制简单的可怜只有一条:ifrequest("content")=""then也就是说只要提交内容不为空就可以通过验证并写入数据库.

时间: 2024-09-14 23:34:16

关于留言板被非法代码注入问题的相关文章

asp简单的ajax留言板(采用三层模式)

ajax 好久没有写过asp了,这回写个留言板还真觉得有点难度,竞然写了整整一天,哈哈.就只有留言其它的都什么也没写,采用三层结构(不知道算不算,本来对三层的概念很糊涂) 演示www.zj55.com的留言板,希望各位大哥大姐如果发现有漏洞的话请在这里告诉我,千万不要黑我的网站,在这里小弟先谢过了. index.asp<%@ codepage=65001%><%option explicit%><% Response.Charset="utf-8"%>

利用Ajax技术写一个迷你留言板WEB控件

ajax|web|控件 初学Ajax不久,自己写个小东西,以作学习日记留言板图片如下: 样例地址:http://www.8dao.net/miniguest/ 首先,这里用的是Access数据库,便于移动.数据库很简单,表Guest,字段有ID,Name,Content 要实现Ajax,利用asp.net ajax 1.0 bate是很方便的,在http://ajax.asp.net可以下载到.安装好后打开VS2005,新建一个ASP.net AJAX Enabled Web Site项目在里面

利用XML开发留言板简单的例子

xml XML是一种基于文本格式的元标记语言,它注重对数据结构和数据意义的描述,实现了数据内容和显示样式的分离(xml+xsl),而且是与平台无关的. 由于XML注重数据内容的描述,因而,对于数据的检索非常有意义,我们不会再象HTML那样,检索出与我们要求无关的信息. 另一方面,XML文件是数据的载体,利用XML作为数据库,不需要访问任何数据库系统,我们可以使用任意WEB技术来显示我们的数据,比如HTML,FlashMX 等. 由于世界各大计算机公司的积极参与,XML正日益成为基于互联网的数据格

ASP+XML留言板介绍

asp+|xml   我开始学习xml时做了一个简单的xml留言板. ------------------------------- 创建一个新的XMLDOM object server.createObject("Microsoft.XMLDOM") -------------------------------- 加载一个xml文件 set objXML=server.createObject("Microsoft.XMLDOM") filepath=serve

php+mysql 最简单的留言板

学完了记得动手操作. 欢迎来到我的留言板! name: email: content:  以上是小编为您精心准备的的内容,在的博客.问答.公众号.人物.课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索mysql , 留言板 , 简单 , email , name content php mysql留言板.php mysql 留言板源码.php mysql留言板系统.php mysql制作留言板.php mysql实现留言板,以便于您获取更多的相关知识.

用PHP制作留言板

我们在很多网站上都能看到各式各样的留言板,它是网站与访客之间进行交流的主要手段之一.一个设计合理,界面优美的留言板程序能从侧面体现网站良好的服务,给来访用户留下美好的印象,增强用户对网站的信心.留言板从程序角度来看其实很简单,难在朴实无华的功能中有创意的表现.下面我们仅以PHP脚本程序为例,从程序的角度讲述怎样制作留言板. 留言板实现的原理一般有两种,即文件型和数据库型.它们是以留言信息在服务器的存放方式来区分的.由于文件型留言系统难以胜任多用户.大容量的信息处理和查询事务,因此具有良好延展性的

jsp留言板源代码二: 给jsp初学者

js|初学|源代码 guestbook.jsp =========================== <html><head> <META content="text/html; charset=gb2312 " http-equiv=Content-Type> <title>张家界电话黄页(网上114)</title></head> <style type="text/css">

jsp+mysql制作简单的留言板(2)

js|mysql 上次已经完成了board.jsp ,现在来看看第二个:message.html,这个是相当的简单的.这个档案是产生一个表单来让使用的人输入资料和留言!代码:<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><HTML><HEAD><TITLE> 我要留言 </TITLE><META NAME="Generator&quo

实现有管理功能的ASP留言板

今天我们来写一个有管理功能的留言板程序.所谓的管理功能,其实就是每条留言前有一个选择框,点中要删除的留言,或者点"删除所有留言",就完成了批量删除.通过这一实例,我们可以初步了解ASP中对数据库的基本操作. 一.建立数据库(ACCESS2000中文版) myid 文本型 20字节 这是发言的唯一标志 myname 文本型 10字节 这是保存留言人姓名的 nowtime 日期/时间型 这里记录了留言时间 mytitle 文本型 30字节 这是留言的题目 mybody 备注 留言内容 其中