西二第五次考核——匿名の提问箱
- 强烈推荐使用:360浏览器(记得切换到极速模式,否则可能出错!)
Chrome、IE9以上(可能部分PNG图片无法显示),IOS7以上、
http://39.101.199.3:8080/myProj-1.0-SNAPSHOT/views/login.html
用户名:普通用户
密码:123abc
http://39.101.199.3:8080/myProj-1.0-SNAPSHOT/views/admin_login.html
用户名:admin
密码:admin123
不知道为什么,服务器上登录花费的时间较长(第一次登录大概2~3分钟),本地测试的时候明明很快的。。。 ,所以强烈推荐本地运行。
- 项目中的“views(local)”是本地运行时使用的前端代码,“views(server)”是放在服务器上运行时使用的前端代码,两者的区别只有访问后端接口不同。
Intelij IDEA2019.2.4、MySQL8.0.17.0、aoache-tomcat7.0.99、jdk-8u91、javaEE7
1、观看工程中的文件:运行前必看.txt
2、IDEA->Java Enterprise->RESTful Web Service
3、配置SDK、JavaEE、Aplication Server(相关版本参考上述)
4、添加Web Application和Maven支持
5、复制相关文件
- 6、将“views(local)”文件夹放到"myProj\web"文件夹中,并改名为“views”。
Jersey(JAX-RS-2.1.1)、JWT、AES、RSA、MD5、MVC、JDBC(Druid)、REST、Web Application4.0、Maven、前后端分离开发
Bootstrap4、jQuery、AJAX
http://doclever.cn/controller/public/public.html#5e68d7f76bd54308f04c1d1b
https://www.jianshu.com/p/d797a9083723
-
记录用户的常用登录地点
-
检测异常登录行为向用户邮箱发送警告
-
在修改敏感信息(比如邮箱)的时候验证用户是否处在常用登录地点
-
在用户密码被爆破时,比如频繁的登录失败时通过邮箱提醒用户
-
有新公告、发起了举报、举报得到处理、提问收到了回复、被封禁/解封了、账户激活成功将会接收到一条站内消息
-
站内消息是默认是未读状态,阅读后标记为已读。站内消息优先展示未读的最新的消息。
-
前端加密:前端先随机生成一个AES秘钥,再向后端申请获得后端的RSA公钥。利用AES私钥加密密文,再用RSA公钥加密AES私钥,将密文和加密后的私钥发给后端。
-
后端解密:先用RSA私钥解密得到AES秘钥,再用AES秘钥解密密文,得到密码,并记录AES秘钥。
-
后端加密:后端利用得到的AES秘钥加密密文,发给前端。
-
前端解密:前端利用AES秘钥解密密文,得到密码。
-
问题一:用户的密码被非法用户恶意更改,无法登录网站,因此用户想修改密码后,顺便把非法用户踢下线。要怎么做呢?
-
回答: 在Java后端中维护一个Map<String, Date> OnlineAccount,记录的是每一个用户的登录时间,在进行JWT验证的时候,验证这里的时间是否与JWT中的时间一致,不一致则直接跳转到登录页面。回到问题上面来,用户修改密码以后,会把OnlineAccount里面的时间设置为null,这样非法用户在进行非法操作的时候JWT验证不通过,会强制跳转到登录页面。
-
问题二:用户在注册的时候不小心输错了邮箱导致无法激活账户怎么办?
-
回答: 在激活邮箱的时候会要求用户再输入一次邮箱,以这次的邮箱为准。
-
问题三:如果修改的新邮箱和其他用户的邮箱重复了怎么办?
-
回答: 修改邮箱的时候会进行判断,数据库中是否已经有了这个邮箱,有的话则不允许修改。
-
问题四:用户知道了他的密码已经泄露,因此上网站修改了他的密码,但是非法用户已经在该用户修改密码前登录了账号怎么办?可以把非法用户踢下线吗?
-
回答: 用户在修改密码的时候会修改OnlineAccount(OnlineAccount的介绍参考问题一的回答)中的时间为null,则之前登录的用户会JWT验证失败,直接跳转到登录页面。
-
问题五:既然允许使用用户名登录,并且也允许修改用户名,那么如果系统中已经有了一个叫w2ol的用户,另一个用户正在修改资料,想把用户名改成w2ol,这时候怎么办,系统应该允许他修改吗?
-
回答: 如果数据库中已经存在了这个用户名,则不允许该用户修改,这样就不会出现重复的用户名。
-
问题六:要是恶意用户上传了超大的文件怎么办?
-
回答: Java后端中会判断文件的大小,如果文件大于2MB,则不允许上传。
-
问题七:如果有用户上传了一个exe文件或者上传了其他奇怪后缀名的文件(不是图片文件的后缀名)怎么办?
-
回答: 首先会判断文件后缀名,只有jpg、png格式能上传。接着清洗图片(清洗图中的非法代码,清洗掉伪装成jpg、png的非法文件等等),获得图片长、宽,添加一个透明的水印,如果操作失败,则为非法图片。
-
问题八:如果有用户上传了两个相同文件名的文件怎么办?
-
回答: 系统会生成一个随机不重复的名字,再判断数据库中是否重复,如果重复则再生成一个,直到不重复为止。
-
问题九:如果用户上传了一个损坏的图片怎么办?
-
回答: 利用问题七的回答中的清洗图片,可以找出损坏的图片。
-
问题十:接口与URL安全
-
回答: 在发送给用户的链接中,包含一个签名参数sign,它的值是加密过的用户信息、过期时间等等,后端会判断sign是否正确并在有效期内,非法则不进行操作并报告错误。
-
问题十一:密码简单地进行哈希就足够了吗?最安全的做法是什么,你可以实现它吗?
-
回答: 后端中对密码进行了加盐处理,做法是:原密码+原密码的前八位(不足八位的密码则取全部),将得到的字符串MD5加密后存储。
前端:显示信息的Table,如果在两个不同的Table中重复查询,会出现内容重叠的bug,解决方法就是查询另一个的时候刷新一下,这几天太忙了,刷新还没加上orz
前端or后端:不用过滤关键词的方式实现防XSS攻击。
1.0