安家的注册登录以及2种攻击,跨域

注册登录的过程

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字段,若字段的值在白名单内,即可跨域传输