第一个你们都知道的是注入攻击:前端
这是针对数据库的破环行至关巨大,当不单是只注入sql,还有垃圾代码。谈谈防护注入攻击。通常来讲预防sql注入的最佳方式是,使用预编译语句绑定变量。node中能够用escape()对查询语句进行编码,也能够基于数据库进行转义。前端必定要检查数据类型,例如日期只能输入日期,号码只能输入号码。node
第二个常见的是文件上传漏洞:web
他指用户上传了可执行脚本,而且经过该脚本获取了执行服务器的能力,这种攻击没有技术门槛。这要知足三个方面的条件,1,上传的文件能被服务器执行。2,经过web能访问到。3,上传的文件不能被压缩,格式化改变内容。算法
如何应对这种上传攻击呢?sql
首先文件的上传目录必须设置为不可执行,用户伤处的文件,放到单独的服务器作静态资源处理,还能做为缓存增长访问速度。数据库
其次用白名单的方式上传的文件类型进行过滤。浏览器
最后使用随机数改写文件名和路径。缓存
这个东西其实很难处理:例如上传的色情图片,反动政治,跟业务结合的越紧密问题越大。服务器
第三个是认证和会话管理微信
认证和受权是两个过程,认证是认出用户是谁,受权是用户能作什么,认证其实就是验证凭证的过程。
用户的好多密码是较弱的,说了你可能不信:某国导弹。控制帐号:admin,密码是123456,其实做为服务端人员也不该该掌握用户密码:用户密码须要用不可逆的加密算法,或者单向散列函数算法,加密后存储的数据库。这应才能保证用户的隐私性。密码通常在登陆时候用,用户第一次登陆完成之后,服务端就生成session,这个session能够存到浏览器的cookie中,因此session必须是高随即的。一种有意思的攻击叫session保持攻击:session是有有效期的,过了有效期用户要从新登陆,有时为了用户体验只要用户"活着",session会一直活下去,从而攻击者不停的发送请求,让session不能销毁,从而耗费系统内存,在web开发中访问量大的时候比较明显。强制销毁session就好了。
还有一种认证第三方登陆,微信支付宝的那一套auther认证,开发微信公众号的都知道,这里稍微展开一下,以微信为例子:
每给公众号都有个appid。经过appid,构造一个受权url,若是用户赞成受权,微信服务器将重定向到当前链接上,而且该链接会携带一个code值,能够根据code值获取用户的access_token,而后用token值获取用户信息,注意每一个code都有过时时间。
第四个是用户权限控制
垂直权限控制:是基于角色的权限控制,用户属于某个角色,该角色有什么权限,通常在客户关系管理时候用。还有超级管理员权限,能给角色分配权限。这是常见的解决方案,不过这种方案有越权访问的问题。