之前一直没有注意这个问题,觉得在js中做过数据验证后就没有必要再在后端做数据合法验证了,今天拿一个页面测试后发现页面端的数据验证根本不可靠。
拿今天的例子来说,公司的业务是汽车租赁服务,后台管理网站中有个功能:一个城市下允许将一个门店所拥有的车型复制给另一个门店,当初的需求是不允许将一个门店的车型复制给这个门店本身,如图
对应的js:
这个时候我仅仅需要F12打开控制台,在控制台中删掉这段js代码保存,就可以执行这个违规操作。
好在这个网站只有内网可以连,我又在百度上搜索了一家旅游电商上市公司的官网,打开控制台后发现居然这个对外的官网js也是这种风格,阅读代码后发现页面的游客登录账号只要在js里修改了身份类型后就可以以正常身份登录进去。。。
我又翻了翻阿里巴巴、百度的一些网站后,总结以下几点:
第一,但凡跟数据、业务逻辑有关,都不要写在js里,js最好只控制交互不控制流程;
第二,养成压缩js的习惯,压缩后的js可读性会变差很多,尽管在别有用心的人面前作用不大,但多少能让一部分无聊的人打消一些无聊的主意;
第三,js文件的命名不要暴露功能,今天翻了不少网站,很多网站打开控制台就能看到诸如“login-index”之类的命名,里面各种身份验证方法甚至还写清楚注释告诉你某个字段的值为几的时候这个登录账号可以拥有什么类型的权限
最后再强调一下,永远别信任前端数据