怎样做才是安全的呢,ASP,SQLSERVER问题?(200分)

  • 主题发起人 一剑封喉
  • 开始时间

一剑封喉

Unregistered / Unconfirmed
GUEST, unregistred user!
现在正在做一个课题,用ASP连接SQLSERVER,但是我注意到连接SQLSERVER的用户名和密码
都要在ASP中写下,这样系统的安全性就得不到保障。后来想做个COM,将连接放到COM中去
实现,可是又不是很会做,不知道,那位大侠能够帮忙,如果用COM ,请给个详细的方案
最好有原码(包括在ASP中的调用);如果不用COM也能实现,那么请一定告诉我,必有重谢!
 
对 asp代码采取加密手段
 
你可以用sce10en.exe对ASP进行加密,这个程序是微软做的,一时还没有听说解密它的方法。
加密后的字文件打开后看是乱码,也不可更改。
再,将数据库的后缀改为ASP,这样它就不能被下载。安全性也好些。
做COM的事我不是很懂,但一定得服务被你完全控制下才行。租用空间时不可行。
 
建立应用程序角色,一一个普通用户登陆进数据库,执行相应的经过加密的存储过程根据
一定的条件以激活相应的用程序角色,这样就是应用程序角色角连接管理数据库,登陆用
户名,密码泄漏泄漏也无关紧要,因为它基本上没有什么权限,除啦执行一个存储过程的权限,
可,以在存储过程中嵌套多个存储过程,基本上用asp本身就没什么安全性,对asp代码加密更
好,其实用jsp开发网站也不是很安全,现在反编译软件满天飞
 
:kifo 兄,你说哪个可执行文件,再哪能得到呀,而且它是否能够达到我的目的呢?
:w12345678兄,你说的这个方法不太可行,因为用户访问ASP要进行INSERT,UPDATE等操作
所以就得给他付与dbreader,dbwriter的权限,因此就会造成系统安全性的降低!
 
为什么不行,你用数据库账号登陆,同样的给她赋权,这样如果你的用户长好泄密,别人
可以通过改账号随意操作你的数据库,还有什么安全性可言呢?按我说的办法,访问数据库的
是应用程序角色,该应用程序角色只能通过呢的应用程序访问数据库,怎么会造成安全性降低
呢,你看一看联机帮助里面关于应用程序角色的描述,里面描写得很详细
 
为什么不提示让用户自已输入U与P呢!社样不要考虑那么多了
 
w12345678兄:我还是不明白在看了帮助之后, 麻烦您能不能详细的说明一下。数据库角色
这个概念我不是很清楚,难道说在ASP中用于连接SQLSERVER的UID和PASSWORD用写成数据库角色
和应用程序密码吗?那样好象不能行的通,而且角色对每个表的权限都要付上,我真的很糊涂
能不能给个详细的说明或例子。我的邮箱是liudai@21cn.com,多谢您的指教
:windbell兄:难道用户 在访问ASP的时候都要输入sqlserver的用户名和密码吗?那样
你的SQLSERVER还要不要安全了,倒不如人家直接访问你的SQLSERVER得了
 
如果从安全性考虑,你不希望将连接SQL Server的字符串(包括密码)写在ASP脚本里,我
想有两个办法解决:
1、通过调用COM组件的方法获得数据库的连接字串,这样,这个变量是动态获取的,而且是
在服务器端执行,因此即使有人通过什么工具从服务器端取得了你的全部ASP代码,那代码
也是静态的,是不会包含数据库连接字串的。
2、更安全的方法(但开发起来比较麻烦),即所有的数据库访问都不通过ASP来执行,而是
通过ASP调用MTS/COM+组件来取得,这也就是李维的书上所讲到的那种方法,虽然开发起来
比较麻烦,但那是能够承担企业级Web用户的方法。
用Delphi编写COM组件本身是一件非常容易的事,但如果程序是运行在Internet上,而且不是
用自己的服务器,而是租用空间的话,那就麻烦了——ISP可不会同意安装你的组件。
 
你拨号上网不也输入了U和P吗?那你是否得到了远端的控制权了呢?
在访问ASP的时候都要输入的也没必要就一定是sqlserver的用户名和密码,完全可以
在WEB服务器端进行处理后在使用,只不过最大的问题是这样就不能实现数据库的
自动隐式联接?
 
加密ASP是一个方法。
写成COM的工作量较大,但现在的ASP。NET功能非常强大,建议采用ASP。NET,结合COM,比较好。
 
to 一剑封喉:
建立一数据库的登陆用户read1,把该用户加入public组,这样该账户登陆到数据库后没有
一点权限,建立一个应用程序角色www,然后吧她加到dbowner组,她现在就有啦对数据库
的管理员权限,建立一用户表,存储用户的各种信息,建立一加密的存储过程proc1
,该存储过程用于验证你自己建的用户表里的用户信息以及激活应用程序角色,把proc1
的执行权赋给read1用户,在asp里通过read1登陆到数据库,这和一般的用户登陆
到数据库没有任何区别,但是read1基本上没有任何权限,只有执行proc1的权限,
执行proc1验证自建的用户信息,验证成功则激活相应的应用程序角色www,现在www
覆盖啦read1的权限,可以操作数据库啦,你还可以根据你自己建的用户权限级别不
同激活不同的应用程序角色,其实应用程序角色就是允许你自己建立自己的一套权限管理,
代替 SQL Server验证用户身份
 
:w12345678兄,非常感谢您的指教,我有些明白您的意思,不过请原谅小弟资质比较差
能不能麻烦您把您说的那个PROC1给我写一份,还有就是您说这个PROC1要加密,这怎么实现呢
而且当read1用户登陆之后他一定能够看到这个PROC1,那么他手动执行之后,我想这是否也
能够达到付与他权限的目的呢?因为ASP程序是公共原码的,所以READ1一旦登陆,就具有了
执行PROC1的权限了。这样是不是也不是很安全呢?请一定要指教,感谢!
 
to 一剑封喉:
不用担心,即便以read1登陆,执行proc1,但是激活应用程序角色需要经过验证的,
就是你自己建的用户表里的用户账号检验,验证不通过照样只有执行该存储过程的权限
加密存储过程就是在创建存储过程的时候加 with encrptoin选项,加密之后任何用户
也看不到源代码,注意保留一分明码备份,read1对proc1只有执行权限,没有修改的权限
类似的举个例子
create proc proc1
@user nvarchar(20),
@pass nvarchar(20)
with encryption
as
declare @ret int ,@qx int
set @ret=0
if exists(select * from usertable where username=@user and userpass=@pass)
set @ret=100
if @ret=0
return 999 --无权
set @qx=(select qx from usertable where username=@user and userpass=@pass)
exec proc_setapp @qx
return 1000
go
至于proc_setapp存储过程主要是根据权限判断激活哪一个应用程序角色
自己比照着写吧
注意你的usertable的查询权限要控制好
 
to w12345678兄,您不要闲我罗嗦,可能我前面表达的意思不够明白,您给我的答案有一定道理
但是我还有个问题不太明白,您说的这个存储过程PROC1是在ASP中使用只有登陆权限的用户
登陆后才使用的,如果一旦有人在服务器上通过我的ASP看到登陆用户和这个存储过程,
那么他就可以使用这个登陆用户登陆到SQLSERVER上,然后执行PROC1,这样他就可以完全控制
我的数据库了,就无安全性可言了,不知道您认为我说的是否正确。
还有一个问题就是
CREATE proc proc1
as
exec sp_setapprole @rolename='demouser',@password='demopass'
go
当我创建了这个存储过程以后,然后在ASP 中执行后或者在sqlserver中用EXEC PROC1执行时提示这样
的错误:
服务器: 消息 15422,级别 16,状态 1,过程 sp_setapprole,行 36
只能在特殊级别上激活应用程序角色。
还有就是您说的用户表中的帐号密码验证是怎么一回事情呀,这个用户密码与我登陆SQLSERVER
的用户密码是否一样,不一样,那又怎样存在验证的关系呢!
,还得麻烦您不吝指教,非常感谢!!!
 
to 一剑封喉:
不好意思,我以前做的是c/s模式用的应用程序叫色,原想,在b/s夏一样可以用,谁知
***应用程序角色只能通过查询语句直接执行,比尔他女儿的是怎么想的
 
呵呵,还是要多谢您,您给了我一个启发,我可以这样做,不知道对不对
可以建立一个存储过程PROC1,加密之后,通过这个存储过程和用户登陆的read1进行
验证,得到一个SQL语句,然后ASP中执行这个SQL,就是增加应用程序角色。但是我试了一下
是可以,不过在得到角色的权限之后,只能进行一个SQL的查询,然后就不可以了,不知道
您知道这个问题吗?
 
to 一剑封喉:
以前开发C/S模式是不会经常断开连接数据库
B/S吗我也没办法,微软的东西做的真实操蛋,我照你说的试啦试,你再刷新一次就
又可以查询啦,可能应用程序角色只适合C/S开发
又:
你可以给read1用户仅选中public和db_denydatareader,然后吧你所有的有关安全的操作全部写成
存储过程,授予read1对存储过程的执行权,专门写一个用户验证存储过程,然后在每一个存储过程
前面加上该用户验证存储过程
 
to 一剑封喉:
>>不过在得到角色的权限之后,只能进行一个SQL的查询,然后就不可以了,不知道
>>您知道这个问题吗?
在呢的连接字符串中加一句 OLE DB Services= -2
就可以啦
以为通常ado缺省用啦一个 connection pool
即便你断开,这个connection 病没有真正的释放,而是放在连接池啦
所以下一次在连接出错
http://support.microsoft.com/default.aspx?scid=KB;EN-US;Q229564&
 
TO w12345678兄,多谢您的方法,不过我试过了一下,好象OLE DB Services= -2
好象不
行,没有任何帮助,可能您是用的DELPI,我用ASP就不太可行,不知道该怎么办,
而且您知道用ASP怎样调用SQLSERVER中存储过程吗?我找了好些书都没有介绍的。多谢
如果最后一旦解决问题,我将非常感谢您!
 
顶部