• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    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()
    %>
    上一篇:SQL 注入式攻击的终极防范
    下一篇:asp select下拉菜单选择图标并实时显示
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

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