常见的web攻击方式及预防

1.sql注入。

在用户的输入被直接动态拼装sql语句时,可能用户的恶意输入被拼到了sql语句上,而造成了一些恶意操作。比如查询到一些数据甚至删除一些数据。一般应对方法是对sql语句进行预处理。
thinkPHP防sql注入:https://www.kancloud.cn/manual/thinkphp/1844#

2.XSS Cross Site Scripting。跨站脚本攻击。

想办法让 你 在某个网站上执行 我 的js。

  • 反射型。 url中的值,服务端处理之后成了XSS代码到页面上。
  • 存储型。 XSS代码会被数据库或其他方式存起来。比如留言板,你留的言包含恶意脚本,被存数据库了。而目标用户打开了相关页面。你的留言被查出来并显示。浏览器发现XSS代码,且当成正常html与js解析,就引起了XSS攻击。
  • dom XSS。不需要服务端的直接参与,依靠浏览器端的dom解析。 尽量少用eval函数。

一般情况下,XSS攻击代码会加载一个的文件。这样的好处是攻击代码可以控制。只要自己修改了恶意脚本,被攻击者也会受到不同的攻击。
比如盗取cookie。

  • 解决。
    表单提交或者url参数传递前,对需要的参数进行过滤。 过滤用户输入,检查用户输入的内容中是否有非法内容。
    用HttpOnly保护cookie
    对用户输入数据的处理。编码,解码。
  • React出于安全考虑的原因(XSS 攻击),在 React.js 当中所有的表达式插入的内容都会被自动转义。而一定要输出动态 HTML 结构必须要用dangerouslySetInnerHTML。
    同样的,vue中直接输出html也需要使用v-html=”rawHtml”指令。

3.CSRF Cross Site Request Forgery 跨站请求伪造

这里先说一下,http是无状态的。服务器端和浏览器端的身份判断一般是通过cookie。 后端会根据请求者传递的cookie信息判断请求者的身份。 攻击者的请求只要是带上了目标用户的cookie,就可以合法请求。

  • 跨站。 请求来源很可能来自其他网站。 也有可能来自本站。
  • 伪造。 请求并非用户的意愿。
  • 实现。

    • 利用跨域标签img iframe等在b网站发送往a网站get请求,会带上a网站的cookie,由此可见对于数据修改的请求最好不要用get。如果你在a站登录了,又访问了恶意网站b,而b上面有一个恶意img标签的get请求,那你的数据可能就被删除了。 而跨域的ajax请求因为同源策略,不会带上cookie,但是也能请求到结果,后端会处理这个请求,不过因为没有携带cookie信息,后端拿 不到登录状态,很多操作不会成功。跨域请求的结果也会发到客户端,不过由于同源策略的限制,浏览器读取不到这个响应结果。

    • 伪造form表单提交。那么,post请求就安全了吗?form表单是跨域的。并且可以提交post请求。我们在b网站伪造一个form表单自动提交到a网站。

  • 预防
    • 最好的办法是带token。任何请求都带上token。这样伪站可以发请求,但是无法拿到token,后端收到的就不带token就可以判定非法了。

对于普通用户而言,别人发过来的网站不要轻易点。不管它是本域的还是跨域的。

同步发表于:https://github.com/liusaint/ls-blog/issues/29

你可能感兴趣的:(前端)