ASP也使用ORM,给ASP上所有的SQL注入画上句号

一般写ASP PHP代码的朋友都估计是采用直接操作SQL的吧~

看以下的代码

<%

dim conn,rs

set conn=CreateObject("Adodb.Connection")

conn.open ....

set rs=conn.execute("select * from news");

...

遍历 rs....

%>

这样实现速度快是肯定的了,但是在结构逻辑上面1条半条语句当然不觉得怎样!语句多了问题也就来了!

参数没过滤啊,SQL存在注入啊等等~OK 现在我们来换个设计模型!

采用 3层结构 + ORM

ORM : OBJECT RELATION MAPPING

那什么是 ORM技术呢? 熟悉JAVA .NET开发的朋友一定很清楚...就是对象关系映射

把表映射为类 字段映射为属性 而记录则映射为对象...现在JAVA的ORM持久层框架N多

例如hibernate ibatis EntityBean(EJB其中一种)

那在ASP上面呢? 我们也一样可以实现.等等介绍

3层结构 : WEB展现层 中间层 持久层

以下有一个news 的表 简单一点的

create table news(

id int,

title varchar(200),

contect varchar(50000)

)

我们把他映射为类

<%

Class News

private id,title,contect

Sub setID(sid)

id=Cint(sid)

End Sub

Function getID

getID=id

End Function

Sub setTitle(stitle)

title=mid(stitle,1,200)'限制了长度

End Sub

....

End Class

%>

然后我们再设计如何操作数据库转换为对象的代码

<%

Class NewsDataAccessObject

dim conn,rs,cmd

'查询一篇新闻

Function getNewsByID(id)

set conn=Applcation("connection")'连接池里面获取一个连接

set cmd=GetCmd() ' GETCMD函数实现 return createobject("Adodb.Command")

selectString="select * from NEWS where id = @id"

cmd.ActiveConnection = conn

cmd.CommandType = adCmdText ' Const adCmdText=1

cmd.CommandText = selectString

'为刚刚的的@id追加参数,常量 adInteger = 3 adParamInput=1

cmd.Parameters.Append cmd.CreateParameter("@id", adInteger, adParamInput, , id)

'运行SQL语句 返回结果集合

set rs=cmd.execute()

dim anews

set anew=new News

if rs.eof then

else

anew.setID(rs("id")&"")

anew.setTitle(rs("title")&"")

anew.setContect(rs("Contect")&"")

end if

rs.close

set rs=nothing

set cmd=nothing

set conn=nothing

set getNewsByID=anew

End Function

'插入一篇新闻

Function addNews(anew)

dim conn,cmd

if isempty(anew) then addNews=false

set conn=Applcation("connection")'连接池里面获取一个连接

set cmd=GetCmd() ' GETCMD函数实现 return createobject("Adodb.Command")

insertString="insert into NEWS(id,title,contect) values( @id , @title , @contect )"

cmd.ActiveConnection = conn

cmd.CommandType = adCmdText ' Const adCmdText=1

cmd.CommandText = insertString

'为刚刚的的@id @title @contect追加参数,常量 adInteger = 3 adParamInput=1 adVarWChar = 202

cmd.Parameters.Append cmd.CreateParameter("@id", adInteger, adParamInput, , anew.getID() )

cmd.Parameters.Append cmd.CreateParameter("@title",adVarWChar, adParamInput, 200 , anew.getTitle() )

cmd.Parameters.Append cmd.CreateParameter("@contect",adVarWChar, adParamInput, 50000 , anew.getConect() )

'运行SQL语句

cmd.execute()

set cmd=nothing

set conn=nothing

addNews=true

End Function

Function findByTitle(stitle)

....

End Function

Function getPageNews(page,size)

....

End Function

End Class

%>

以上就是对数据库操作然后把结果封装到对象里面 或者把对象写入数据库

这样实现虽然速度上面会稍慢 但是总体逻辑结构非常明显,不需要关心变量是否已经给过滤或者多过滤

而web页面层的设计人员更多的关注于界面方面

以下为提交添加新闻代码

<%

dim id,title,contect,anew,dao

id=Request("id")

title=Request.Form("title")

contect=Request.Form("contect")

set anew=new NEWS

anew.setID(id)

anew.setTitle(title)

anew.setContect(contect)

set dao=new NewsDataAccessObject

if dao.addNews(anew) then

'response.write

echo "success"

else

echo "error"

end if

%>

把新闻查出来显示

<%

dim id,dao,anew

id=Request("id")

set dao=new NewsDataAccessObject

set anew=dao.getNewsByID(id)

if anew.getID()<>"" then

%>

标题:<%=anew.getTitle()%>

内容:<%=anew.getContect()%>

.....

以上片段代码如有错漏谢谢指点~~~

使用这样的设计方式就根本不需要像XXXBLOG XXXBBS XXX文章系统那样

忘记Replace(SQL,"'","''") 而产生injection了!

对于页面的整洁性而言 也不会出现SQL语句,连接等 美工负责好自己的工作然后把对象的属性放到相应的位置就OK

而有可能有朋友会觉得 用户认证方面呢!那更省事了把用户表的用户对象放到session里面就OK

<%

if isempty(session("user")) or session("user")="" then

'跳转

else

set auser=session("user")

echo "欢迎你:" & auser.getName()

%>

时间: 2024-11-02 10:26:12

ASP也使用ORM,给ASP上所有的SQL注入画上句号的相关文章

团购网站“大跃进”画上句号

楚天都市报讯 (记者陈军)团购站们正在步入岁末的"寒冬".昨日,独立团购导航网站团800发布的报告显示:全国团购网站总数在今年10月首次出现负增长,仅新增16家团购网站. 数据显示,截至10月份,武汉共有团购网站158个,因无法访问或访问异常,以及长时间没有更新被视为停止运营的网站共计20个.全国的数据也不容乐观,被视为停运的团购网站共计1017家,总数跌至4057家. 全国团购网站每月总数一直是代表行业整体发展热度的指标,这一指标的首次负增长标志着全国"大干快上"

ASP.NET2.0:Ilungasoft.Framework.Web之基于Callback的无刷新上传进度条控件[带源码]

asp.net|web|控件|上传|刷新|无刷新 共享一个基于Callback的无刷新上传进度条控件的源码.本控件使用的HttpMoudule基于宝玉的一个上传进度条的sample,这里封装为一个控件,方便使用.无需任何代码,只需设置web.config,添加HttpModule的引用,再将控件拖到页面就行.页面中的文件保存操作和传统的asp.net文件上传完全一样.可以设置属性上传过程中出错或上传成功时跳转到其它页面.兼容IE,Firefox,Opera.其它环境没测试,不过因为是基于Asp.

visual studio-求助!!我用VS Studio 写了一个asp.net网站,如何配置IIS,使得能够在浏览器上访问?

问题描述 求助!!我用VS Studio 写了一个asp.net网站,如何配置IIS,使得能够在浏览器上访问? 我用Microsoft Visual Studio 2013 编写了一个网站,现在只有项目工程文件,如何配置IIS,使得能够在浏览器上访问??谢谢!! 解决方案 http://jingyan.baidu.com/article/fedf073772b93535ad89777c.html 解决方案二: http://jingyan.baidu.com/article/eb9f7b6d9e

asp下通过HTTP_USER_AGENT判断用户是从手机上访问,还是电脑IE上访问_应用技巧

通过HTTP_USER_AGENT判断用户是从手机上访问,还是电脑IE上访问. asp代码片段:主要使用了正则匹配手机环境,大家可以补充手机平台. 复制代码 代码如下: set regex = new regexp regex.ignorecase = true regex.global = true regex.pattern = "mini 9.5|vx1000|lge |m800|e860|u940|ux840|compal|wireless| mobi|ahong|lg380|lgku|

请问一下关于 Asp.net 从数据库中取图片显示出来,并且可以下一笔, 上一笔, 最前一笔, 最后一笔

问题描述 请问一下各位,现在需要Asp.ne实现一个类似图片浏览的功能,输入日期区间后,从数据库中读取大量二进制图片,显示出来,并且可以下一笔,上一笔,最前一笔,最后一笔,而第一次加载图片时不能load太久,且下一笔时也不能load太久,请问有类似功能的源码或库,可以参考的吗?thanks! 解决方案 解决方案二:上一笔,下一笔啥意思...是上一张图片,下一张图片吗.你从数据库读,可以采用预读的机制,把当前图片的前后几张图片先读出来,缓存下来.这样,切换的时候可以加快速度.解决方案三:笔这个单位

在ASP.NET 2.0中操作数据之五十二:使用FileUpload上传文件_自学过程

导言: 到目前为止,我们的教程围绕的是text数据.然而,很多应用程序既需要处理text数据,也需要处理二进制数据.比如招聘网站可能需要用户上传Word或PDF格式的简历. 使用二进制数据面临一项挑战:在应用程序中如何存储二进制数据.我们必须更新添加记录的界面以支持用户上传本地电脑中的文件,并添加额外的功能以下载某条记录的相关二进制数据.本章以及接下来的3章,我们探讨如何处理这些问题.在本系列教程结束时,我们将创建一个功能完善的应用程序,它为每种类型的记录提供相关的图片和PDF小册子. 在本系列

asp.net在图片上传的时候怎么给上传的图片在右下角添加图片水印

问题描述 asp.net在图片上传的时候怎么给上传的图片在右下角添加图片水印,希望有具体的的实现步骤和可行的代码实例 解决方案 解决方案二: 解决方案三:usingSystem;usingSystem.Collections.Generic;usingSystem.Text;usingSystem.Drawing;usingSystem.IO;usingSystem.Drawing.Imaging;usingSystem.Web;usingSystem.Drawing.Drawing2D;usi

asp.net发送短信,本地测没有问题,放到服务器上就发送不出去,为什么?

问题描述 asp.net发送短信,本地测没有问题,放到服务器上就发送不出去,为什么?服务器上需要设置吗? 解决方案 解决方案二:看看服务器有没有防火墙之类的拦截不.都关闭了试试.另外咨询一下机房有没有什么限制不.解决方案三:防火墙--解决方案四:通过防火墙,开启相应出站规则,就是出站端口.解决方案五:能具体说一下吗,之前没接触过服务器,不会弄啊!解决方案六:防火墙全关了,还是发不出去.解决方案七:发送短信,你用的短信平台,还是短信猫??解决方案八:在服务器上dll注册了吗~分64位32位目录的调

ASP.NET2.0中将文件上传到SQL Server数据库代码

SQL Server数据库代码   <%@ Page Language="C#" EnableViewState="true" %> <%@ Import Namespace="System.Data.SqlClient" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.or