注册登录的过程
jsp+servlet+jdbc
登录和注册写到form里,action的值为对应的servlet名字
servlet通过request.getParameter
获得前端页面输入的用户名和密码
调用userService.login()
登录处理业务(到dao层去通过sql语句查询数据)
如果返回null,说明登录失败,把错误信息和回显表单的信息,通过request.setAttribute("msg","用户名或密码错误")
保存到request域中,通过requset.getRequestDispatcher("sign.jsp").forward(req,resp)
跳回到登录页面
如果返回不是null就是登录成功,通过response.setStatus(302);response.sendRedirect("index_success.html")
跳到登录成功页面
密码是明文存储,不安全。怎么变安全
可以通过md5()加密
对于加密字段的更新update 表名 set 字段名=md5("123456") where 条件;
插入新数据
insert into 表名(字段名) values (md5("123456"))
如果来查询md5加密之后的数据,需要通过数据查询匹配来实现
select * from 表名 where id=10001 and pwd=md5("123456")
安全攻击的方式都有啥,说一下csrf和xss
csrf是跨站点伪装请求,通过盗用用户的信息,登录目标网站
防御:
方式一:Token验证
①服务器发送给客户端一个token
②客户端提交的表单中带有这个token
③如果这个token不合法,那么服务器拒绝这个请求方式二:隐藏令牌
把token隐藏到http的head头中方式三:Referer
Referer指页面请求来源,意思是只接受本站的请求,服务才做响应。如果不是就拦截
xss跨站脚本攻击,通过合法的操作(比如在url中输入,在评论框中输入),向你的页面注入脚本,从而破坏页面的正常结构,插入广告等恶意内容
防御:
方式一:编码
对输入的数据进行HTML Entity
编码,将输入的数据作为纯文本输出,不引起js的执行方式二:校正
避免直接对HTML Entity解码。通过使用`DOM parse`转化,校正不配对的DOM标签(DOM parse作用是将文本解析成DOM结构)
方式三:过滤
移除用户输入和事件相关的属性。比如Onclick(总而言之就是过滤掉一些不安全的内容)移除用户输入的style节点,script节点,iframe节点(尤其script因为它支持跨域)
跨域的方式
之所以进行跨域是因为同源策略的约束
同源策略拦截的是跨源请求,原因是cors缺少Access-Control-Allow-Origin
JSONP:ajax请求受同源策略影响,不允许进行跨域请求,而script标签src属性中的链接却可以访问跨域的js脚本。利用这个特性,服务端不再返回JSON格式的数据,而是返回一段调用某个函数的js代码,在src中进行了调用,实现了跨域
CORS:允许浏览器向跨域服务器,发出XMLHttpRequest请求,从而客服AJAX只能同源使用的限制
- 整个CORS通信过程,都是浏览器自动完成
- 一旦发现AJAX请求跨域,就会自动添加一些附加的头信息
- 实现CORS通信的关键是服务器,只要服务器实现了CORS接口,就可以跨源通信
web scoket:
是一种通信协议,利用origin字段,若字段的值在白名单内,即可跨域传输