6
回答
jfinal 对客户端传来的数据的检查模式
华为云实践训练营,热门技术免费实践!>>>   
在jfinal 中对于从页面上传来的数据是否利用java再检查一次呢,还是直接进数据库?如果直接进数据库,那么在有大量的错误数据时可能会对数据库造成极大的压力吗?这种用java检查在jfinal中已经内置了吗?还是要手工逐个字段写检查代码?还是jfinal再访问一下数据库取得各字段的属性来检查?这里的检查是指页面上传来的数据是否符合数据库的字段类型,不是email、电话号码等特殊类型。问题比较弱,请多指教。
举报
hyhdl888
发帖于3年前 6回/222阅
共有6个答案 最后回答: 3年前

     通常更新与创建操作是一定要在后端检测的,保障数据的正确性以及防止恶意攻击,数据库也要严格,尽量不要让字段允许为空,越严格,今后的事情就越好办。

    页面中用 js 检测通常是为了更好的用户体验,并不能保障数据的安全性,也不能解决恶意攻击行为。

    对于数据显示这类请求,通常不需要校验, url 或参数错误,直接扔个 404 也挺好。

Db + Record 模式不知道是不是少了一次java对前端数据的检查,而是把数据直接交给数据库检查?有了DB+Record为什么还要model?model模式是不是操作数据库前要从数据库里调用一下各个字段的属性对数据进行检查,然后再把数据传给数据库crud?这种模式也会增加数据库的一些负担。

引用来自“hyhdl888”的评论

Db + Record 模式不知道是不是少了一次java对前端数据的检查,而是把数据直接交给数据库检查?有了DB+Record为什么还要model?model模式是不是操作数据库前要从数据库里调用一下各个字段的属性对数据进行检查,然后再把数据传给数据库crud?这种模式也会增加数据库的一些负担。

正规公司通常的做法是在前后台都检查用户提交的数据。如果做成了服务或接口,那么,服务、接口也需要检查调用参数。部分小项目没有必要后台校验数据,都由前端完成校验,用户体验也不错,但此种方式容易受到攻击。最省时的做法就是利用后台Validator方式来校验数据,用户体验一般,保险系数最高,工作量也容易接受。把数据完全交给数据库检查是最不可取的方式,因为数据库只能做简单的数据规则校验,与业务相关的校验是无法支持的,最终会导致存放的数据不可控。

“有了DB+Record为什么还要model?”,这样的问题就像问有了蔬菜为什么还要有肉,不需要多解释,你得自己去体会。你想自己的应用是多吃蔬菜还是多吃肉,或是只吃蔬菜,都看你自己的选择。

model模式是不是操作数据库前要从数据库里调用一下各个字段的属性对数据进行检查,然后再把数据传给数据库crud?”,你说的这种模式其实是最安全的,但也是绝大多数系统不敢做的。因为,保证数据没有一丁点问题的开销太大,承受不了。

我只是想从安全性和性能方面了解一下jfinal源码的设计思想,然后再自己写个代码生成器。对于crud,实际上目前业界的做法一般是JS(界面)+java(服务器)+数据库三层检验。我是想知道jfinal在默认情况下对数据进行检验吗?还是要手工增加代码进行检验是否符合数据库要求?当然是指达到数据库crud的要求,与业务逻辑无关(如果你要客户输入email地址,就和jfinal的源码无关了)。model和DB+activerecord两者在这一方面有什么区别。也就是说在默认情况下,他们在java层面上对要参与crud的数据是否做了字段类型检查?
--- 共有 1 条评论 ---
糊搞model和DB+activerecord两者在这一方面有什么区别,这样的问题请研究完源码再自己搞清楚。。。 3年前 回复

引用来自“hyhdl888”的评论

我只是想从安全性和性能方面了解一下jfinal源码的设计思想,然后再自己写个代码生成器。对于crud,实际上目前业界的做法一般是JS(界面)+java(服务器)+数据库三层检验。我是想知道jfinal在默认情况下对数据进行检验吗?还是要手工增加代码进行检验是否符合数据库要求?当然是指达到数据库crud的要求,与业务逻辑无关(如果你要客户输入email地址,就和jfinal的源码无关了)。model和DB+activerecord两者在这一方面有什么区别。也就是说在默认情况下,他们在java层面上对要参与crud的数据是否做了字段类型检查?
这样的需求,早在很久以前就已经提出了,可是没有哪个框架实现。为什么没能实现,自己想。。。
顶部