子咻
子咻
CSRF介绍 ---- >跨站请求伪造(英语:Cross-site request forgery),也被称为 one-click attack 或者 session riding,通常缩写为 CSRF 或者 XSRF, 是一种挟制用户在当前已登录的Web应用程序上执行非本意的操作的攻击方法。 简单的说,就是利用游览器对用户的信任,比如,用户已经登录了ww.aaa.com,自然aaa这个网站就会将用户的登录状态session存在cookie中; 然后,aaa.com这个网页有一个对作品点赞的功能,点赞提交地址为`aaa.com/api.like?id=777`; 这时,另外一个叫www.bbb.com的网站,放了这样一个元素``,我们知道,请求静态资源用的是get方法,这样的话,一旦用户进入这个bbb.com页面,就会请求aaa.com这个网站的点赞接口,而且点赞的用户对象是888; 最后因为用户的登录信息尚未过期,那就等于给id为888这个作品点赞了,然而,用户并不知情。 防御方式 --- 有两种方法: 1. 后端判断referer是否合法(不推荐) 通过HTTP的referer可知道,用户是通过哪个网站发送这个请求的。但是referer的判断并不是好方法,有各种方式可以绕过的方法,具体可见 [CSRF 花式绕过Referer技巧>>](https://www.ohlinge.cn/web/csrf_referer.html?utm_source=tuicool&utm_medium=referral) 1. 每次请求带上token 比如laravel,在后端模板渲染的时候会提供一个csrf的token,这样的话,不同域的网站是拿不到token的,所以也就防止了csrf了。 补充...
前言 --- 公司大了,团队大了以后,自然会出各种产品,即各种项目。而我们知道,每个项目其实都有很多共同的代码可以复用。复制粘贴这种重复劳动当然每个人都很讨厌,而且还有操作失误的情况。因此,往往,比如常用函数封装、正则、组件等,都可以做成npm module发布到npm上,方便所有的项目使用。 基础 --- 基础的命令和操作就不介绍了,资料太多,当然还是最推荐官方的教程,[教程地址戳我>>](https://docs.npmjs.com/getting-started/what-is-npm)。然后,我发现掘金的一篇文章作为补充也不错,[npm - 参考手册>>](https://juejin.im/entry/590fcd02a22b9d0058036856)。 管理 --- 在做自己的module之前,不得不说说怎么管理module这个项目。npm本身并没有版本管理的能力,我们publish什么,npm上就是什么。因此,很显然,我们需要Git来管理我们的npm module。 团队合作的时候,如果是多人维护一个npm module,npm publish的权限建议只能是一个人,比如是创建这个module的人,我们暂且叫他Tom。其他人,包括Tom,对module的所有修改,先push到Git上,然后由Tom做code review。当Tom觉得OK、没问题了以后,合并代码,然后npm publish到npm。 总结一下,我们通过这两点来管理: 1. git 2. 单人npm publish 实现 --- 接下来,我们从0开始,一步步地实现属于我们的npm module,过程中,我们会遇到webpack的配置,读者可以不用太理解webpack部分,应该更多关注npm方面,不过如果对webpack配置有兴趣或者疑问,可以评论留言哦。OK,让我们开始吧~ ### 一、创建git项目...
XSS介绍 --- > 维基百科: 跨站脚本(英语:Cross-site scripting,通常简称为:XSS)是一种网站应用程序的安全漏洞攻击,是代码注入的一种。它允许恶意用户将代码注入到网页上,其他用户在观看网页时就会受到影响。 比如,一个网站的评论区,用户可以输入标签,如图: 点击submit发送内容,如果前端后端都没有做任何处理的话,这段评论在提交以后就会原封不动地展示在html上。而这个时候,script里的代码执行了,导致所有访问这个页面的用户的cookie都发送到了黑客指定的API。 解决思路 --- ### 前端 ##### 提交过程 前端对于这种情况好像在发送到后端的过程中无能为力,即使在流程中加上前端转译,黑客也可以通过直接在控制台执行js的方式来提交评论。 ##### 渲染过程 前端倒是在渲染的时候可以做相应的处理,比如可以用以下方法处理: processedContent(comment) { return comment .replace(/&/g, "&") .replace(//g, ">") .replace(/"/g, """) .replace(/'/g, "'")...
前言 --- 相信很多网站都会遇到也不知道是谁,毫无目的刷网站的接口的事情。 尤其是短信接口,好像所有网站都会被人刷接口,十有八九都是短信接口的提供商找人干的。。。 其次,登录接口也是经常被刷地方,因为可以被破坏者用来爆破用户的密码。 然后,注册接口也是,不过因为国家强制要求手机号注册的原因,现在还好刷注册接口很难了。 防御方式 --- 1、监控异常ip,发现异常ip,直接封ip(这种方法要是遇到使用肉鸡刷的人就没什么办法了) 2、使用验证码(这种方法缺点就是降低用户体验) 在实际项目中,这两种防御方式会一起使用。 **这两种防御方式同样应用在爬虫的防御上。** 由于验证码这东西市面上有很多种,而好的交互和用户的体验息息相关,那么,现在有哪些种类的验证码呢,我们又该怎么选择呢? 验证码分类 --- ### 1、图形验证码(已淘汰) 缺点:用户体验差;攻击者可以用图像识别算法识别字母 ### 2、坐标验证码(不推荐) 缺点:用户体验差;同样可以通过算法识别,然后模拟点击定位 ### 3、滑块验证码 前几年比较火,几乎所有大网站都用了这种方法,但是也有问题 缺点:要是攻击者有了整套的图片资源,也能破解。极验验证码之前就因为滑块图片泄露,导致很多用他们家服务的网站被攻击了。后来他们紧急更新了滑块包和SDK(偷偷地),当时我们CTO打电话给他们才给我们说他们滑块资源被盗了,居然不也通知我们,我们问了才说,造成了公司的损失,浪费了人员的精力。 ### 4、无感知验证码 最为代表性的就是谷歌的reCAPTCHA了,但是毕竟是谷歌服务,国内用起来还是很鸡肋的。 不过,国内也有了这样的解决方案,比如极验就出了这项云服务了,不过名字叫做“智能验证码”。 总结...
前言 --- 无论是Laravel还是ThinkPHP,都会用后端模板,Laravel是Blade,TinkPHP则是类Smarty。 中小型公司,为了快速开发,Laravel真的是利器了。
### Git在我们的开发过程中必不可少,所以我记录了一些自己工作中常用的命令: 初始化 - `git init` 克隆项目 - `git clone` 长期保存密码 - `git config --global credential.helperstore` 获取分支 - `git fetch origin` 合并分支 - `git merge` 获取并且合并分支 - `git pull origin`...
Error tip after running npm install cmd: >Not Found - GET https://registry.npmjs.org/@bit%2fnsebhastian.design-system.card - Not found