最近突发奇想,如果我在数据库里存储一条sql,在web应用程序中取出这条sql然后执行会有什么安全问题吗?
想了想没什么问题, 在服务器部署的程序里取出SQL执行,不涉及到服务器与Web 前端的SQL语句传输,所以也不会被截获分析出表明,SQL注入之类的问题
目前我的知识所知,没有限制,但是如果那些express版的话,整个数据库只能到4G。就算有限制,估计几乎所有企业都不会超过这个数。Oracle就更没有限制了。不然大企业早不用了。access由于是桌面数据库,所以数据量不宜太大,不然效率会非常低下。
有几个弊端,
一个是安全风险,如果攻击者能够修改或者创建这些sql,它就可以把恶意的查询注入到你的系统中。
一个是从维护的角度来说,硬编码的sql以数据的形式存在在系统中,不利于数据库表结构的更改和维护。
还有一个是存在大量的冗余,因为字段名、表关系这些会随着你的数据大量重复散布在数据库里,这些东西很难再次被操纵。
1.这样做容易被SQL注入,web应用存在安全风险。
2.若配置的是静态SQL,会影响数据库性能。
我们之前有一个系统是这样设计的。主要是涉及到一些公式的sql语句,都是模板的形式,存到数据库中。执行效率还是比较高的。
可以参考存储过程。安全问题是没有的,如果别人可以直接修改你存储在数据库的sql语句,那也就可以修改其他的了。
直接创建过程不是更加好,方便管理安全性还高
除非你数据库里存储的sql语句是你事先都明确定义好的,前台页面不会修改你的sql,
不然如果前端可以修改sql,然后你去执行修改后的sql那么存在潜在风险,因为你没法控制前端用户提交sql是否安全。
如,你在后端配置的个sql模版select {p} from tableA, 想要的效果是用户可以动态修改{p} 内容来选择查看数据
但是前端用户可以将sql修改成你意想不到的语句,如select * from tableA;delete * from tableA# from tableA
就会形成注入攻击
这样很容易发生sql注入的情况,存在安全隐患
如果有人拿到了管理员的帐号,就可以操作数据库了。
数据库可以加但是要在编程的时候加正则表达式,要不然安全问题还是有的
应该不会有问题
不过会影响性能
建议还是不要这样
主要是安全的问题吧,不过自己玩玩还好,项目的话,别人如果恶意取出来的话,很危险
我觉得没啥问题,我最近就这样的逻辑,不过我是通过文件来做的,就是搞了个解析器,需求要增加返回数据的时候,我直接改文件的sql即可,不用动到代码,挺方便好用的
我见过上线的项目有这种方式,那项目很老,不存在SQL注入问题,都是服务器内部操作,就是会一定程度影响性能,老项目没有使用框架,可以用这种方式实现一定程度的封装。