对于sql语句的存放安全。

u014480075 2020-01-15 09:47:46
应对甲方的一个代码评审,原先sql语句直接放在ashx或者后端里。这边甲方的规范是不允许直接出现在代码中,想了想放在xml或者app.config里或者存储过程里。听同事说存储过程里不合适?,请教下各位都是怎么做规范的~,说明下放哪里的,取值的时候怎么取
...全文
444 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
wanghui0380 2020-01-17
  • 打赏
  • 举报
回复
有啥用??骗鬼而已 sqlprofile我能看到我想看到的 所以前提是计算机安全,而不是代码安全。 既然我都能看到你的config了,我就看不到connstr?我就不能用sqlprofile看到sql??
正怒月神 2020-01-17
  • 打赏
  • 举报
回复
引用 9 楼 u014480075 的回复:
[quote=引用 7 楼 正怒月神 的回复:] 那就听他的不放在代码里, 放到存储过程里。 至于放到xml,config之类的,我是极其不赞同的。
xml或者config里哪里不妥么?了解下[/quote] 很不安全。
u014480075 2020-01-17
  • 打赏
  • 举报
回复
引用 7 楼 正怒月神 的回复:
那就听他的不放在代码里,
放到存储过程里。
至于放到xml,config之类的,我是极其不赞同的。

xml或者config里哪里不妥么?了解下
正怒月神 2020-01-17
  • 打赏
  • 举报
回复
放在存储过程里,具有一定的好处,但是维护比较麻烦。 优点是,很多问题,你可以直接修改存储过程来改变逻辑, 不需要重新发布。这对大项目来说,有一定优势(不过微服务出现后,就呵呵了。) 缺点是,维护比较麻烦,而且逻辑在sql中,实现总是没有代码里顺畅。 而且存储过程名称,要有严格的规范。
正怒月神 2020-01-17
  • 打赏
  • 举报
回复
那就听他的不放在代码里, 放到存储过程里。 至于放到xml,config之类的,我是极其不赞同的。
圣殿骑士18 2020-01-17
  • 打赏
  • 举报
回复
ibatis作为一个解决方案,有方法来避免sql注入这种问题。
而对于说sql暴露,这个其实不重要,除非你服务器被人攻破了,不然没人能盗取你的sql。
圣殿骑士18 2020-01-17
  • 打赏
  • 举报
回复
引用 12 楼 圣殿骑士18 的回复:
放xml里,不就是ibatis吗,曾经很流行。放xml里也有好处有坏处。好处是灵活性,坏处我觉得是业务和代码分离,代码不好读。

阿里有团队用的就是ibatis,它的优点是灵活性,方便性能调优。
很多时候选择技术不是单纯的因为技术,而是因为组织需要选择技术。阿里庞大的业务体量,能使得数据库性能提升1%都是了不得的,有任何一个sql的低性能,都可能堵塞业务流程,所以每个sql必须高精度调优,就需要高级DBA这个岗位。DBA这个岗位怎么嵌入到整个开发流程而又不和后端开发搅和在一起呢(工作流程的解耦)?ibatis提供了这个方案。
圣殿骑士18 2020-01-17
  • 打赏
  • 举报
回复
放xml里,不就是ibatis吗,曾经很流行。放xml里也有好处有坏处。好处是灵活性,坏处我觉得是业务和代码分离,代码不好读。
  • 打赏
  • 举报
回复
没区别的,写到XML里面嘛,他咋说你咋做就是了,没必要弄其他的哈
  • 打赏
  • 举报
回复
这个就是类似现在的接口,后台处理前端发过来的数据请求,后台读取数据库,加工好数据结构(一般是加为JOSN)然后再返回给前端,前端再处理展示。
github_36000833 2020-01-15
  • 打赏
  • 举报
回复
引用 2 楼 u014480075 的回复:
...放存储过程里你觉得有什么问题没有?
调用存储过程 ListUsers @NameLike = 'Harry%' 和 调用SQL Select * from Users where Name like 'Harray%' 本质上有区别吗?
  • 打赏
  • 举报
回复
你可以写个dat文件,然后数据再有个加密解密算法,QQ里面的dat文件还存用户信息呢
u014480075 2020-01-15
  • 打赏
  • 举报
回复
引用 1 楼 github_36000833 的回复:
xml或者app.config也可以算是“出现在代码中”。实际上更糟,因为更容易被替换而招致注入攻击。
sql语句出现在后端代码中本事是完全正常和安全的做法,或许甲方的真正要求是分层的访问控制。

面向公众的网页服务层
-----------------------
该层没有权限直接接触SQL,没有权限接触数据存储。
该层只能访问应用层,由应用层来提供数据库服务,和存储服务

内部应用层
-----------
该层从外部完全不能访问。但可以提供服务给网页服务层。
该层可以有SQL,数据存储等等的权限。这层代码里的SQL没有问题。

说是直接放后端里 sonar扫描会扫出来。。。,放存储过程里你觉得有什么问题没有?
github_36000833 2020-01-15
  • 打赏
  • 举报
回复
xml或者app.config也可以算是“出现在代码中”。实际上更糟,因为更容易被替换而招致注入攻击。 sql语句出现在后端代码中本事是完全正常和安全的做法,或许甲方的真正要求是分层的访问控制。 面向公众的网页服务层 ----------------------- 该层没有权限直接接触SQL,没有权限接触数据存储。 该层只能访问应用层,由应用层来提供数据库服务,和存储服务 内部应用层 ----------- 该层从外部完全不能访问。但可以提供服务给网页服务层。 该层可以有SQL,数据存储等等的权限。这层代码里的SQL没有问题。

111,094

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧