网站安全性探讨(纯静态页的动态化尝试)

2013-08-25 21:04:01 +08:00
 leonwong
先来说说我的项目:

项目基于jsp开发,采用struts2+mybatis+spring三大框架。

由于事先做好了前端页面,是纯html,出于懒惰,暂且不想转化成jsp页面,所以用js来对其动态化尝试。

尝试包括:

1)表单提交:利用JQuery.ajax()提交表单到后台action,这里取代了form提交表单;
2)读取用户个人数据:同样也是用JQuery.ajax()方法:提交空值>>通过cookie中sessionid保持session>>session中存在用户的ID>>服务器根据用户ID返回特定用户的数据


困惑:

现在业务功能可以基本实现,能够保证让服务器识别到是哪个用户,但是还没设置token,所以暂时没办法确保用户是在特定页面提交的参数,这样也就给CSRF攻击提供了机会,这点经网友指正我已经认识到。

此外的问题就是:
1)js配合纯静态html于长远看,是否有前途?html纯静态页配合js动态化只是我的一个尝试,如果不好我并不会坚持;
2)为了防止CSRF攻击我还应该采取什么措施?
3)除了CSRF我还应该注意什么?
先谢谢各位!
6905 次点击
所在节点    程序员
33 条回复
leonwong
2013-08-26 10:54:59 +08:00
@msg7086 感谢给出一个非常具体的实施方法,你的描述过程非常符合我的口味啊,我也大概知道纯静态的token该怎么实现了,我还想知道,如何防止因为暴露URL带来的隐患和恶性攻击?因为ajax中会暴露我后台程序的URL信息
darcy
2013-08-26 11:01:48 +08:00
@leonwong 我这里说的token是指防止csrf的token
你这个模式存在的安全问题,在由后端生成页面也会遇到的
敏感信息也用post请求获取 防止爬虫
大致流程如 @msg7086 在14楼所说 你提的前端纯静态页面的方案我们在实际生产中已经用了好几年
zzNucker
2013-08-26 11:11:58 +08:00
@leonwong express不是纯静态 是可以用模板的 这种也是比较好的实践

@Frannk lz说的纯静态是服务器不能往页面写入任何东西 如果我没理解错的话。 前后端没必要完全分离, 适当的解耦可以用模板实现 没什么问题
leonwong
2013-08-26 11:18:11 +08:00
@darcy 用了好几年也就证明这个模式可行对吧?我的确感觉出这种方式所遇到的安全问题,动态页也是面临的,所以我才会去尝试
zzNucker
2013-08-26 11:18:12 +08:00
@msg7086 嗯这个方法应该是可行的 实际上还是说明一定要能够从server获取到特殊信息来避免构造。
darcy
2013-08-26 11:39:00 +08:00
@leonwong
嗯,大部分富ajax页面初次载入的内容是server生成,接着都是ajax载入的;而这种做法只是把开始时server生成的初始这一步省略了,改用ajax获取而已。
leonwong
2013-08-26 12:01:23 +08:00
@darcy 恩恩。我明白了很多了,具体细节交给我自己捉摸吧,谢谢
momofiona
2013-08-26 13:14:48 +08:00
从资源的角度来看,静态动态是没有区别的,反正都跑到了客户端,你觉得怎么方便就这么搞。安全性上,数据库写操作只允许使用post
undeadking
2013-08-26 14:54:19 +08:00
楼主是栽在坑里出不来了…防CSRF必须在后端来实现,用前端js来偷懒本来就是个错误方向,你大概是只听说过CSRF这个名词而没搞懂它是怎么回事吧.直接用jsp来实现带token的from,比分离前端js和后端jsp要简单得多,没意识到这是舍近求远么?

防止因为暴露url而遭受攻击的办法当然还有别的,微信公众平台的消息接口指南就有.把全部参数拼接到一块加上一个token值进行hash运算,最终能得到个signature值,很多移动应用的API都有用到这种验证机制.不过在js上还是算了,代码逆向分析的成本太低
yushiro
2013-08-26 15:22:56 +08:00
@undeadking “直接用jsp来实现带token的from”, 对这个实现比较好奇, jsp如何实现? 靠的是session? 还是发送token String到客户端的HTML?
msg7086
2013-08-26 15:35:32 +08:00
@leonwong
后台暴露的问题,
你的程序不过是从「只有java」变成了「html+java」。如果你的后台能够被攻击,那么不管是用动态页面还是用API,都会被干的。自己在java端做好安全措施才是真的。

https的问题,
https有什么代价?一张证书20块钱搞定,就算是用泛域名证书也就70。
leonwong
2013-08-26 19:37:16 +08:00
@undeadking 是我太依赖js了,的确是舍近求远,我现在采取的措施是,jsp和纯静态混合使用,jsp效率高的就用jsp,html适合的就用html,不坚持用js配合html死做下去
leonwong
2013-08-26 19:41:12 +08:00
@msg7086 https搭建复杂度可能对我而言比较高,而且如果参考孔明社交平台后台管理的话,也是可以不用https的,你说的我会好好斟酌,谢谢

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/80183

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX