首页 文章 精选 留言 我的

精选列表

搜索[Web安全],共10000篇文章
优秀的个人博客,低调大师

Vue 路由守卫安全

关注公众号,设置为'星标' ,更多精彩内容,第一时间获取 导读大纲 路由守卫分类 全局路由守卫 单个路由守卫 组件路由守卫 路由守卫执行的完整过程 路由守卫分类 全局路由 单个路由独享 组件内部路由 每个路由守卫的钩子函数都有 3 个参数: to : 进入的目标路由 from : 离开的路由 next : 控制路由 在跳转时进行的操作,一定要执行。 它有 4 个行为: next() : 钩子都执行完了,进入到下一个路由当中。 next(false): 中断路由进入下一个路由。 next('/') : 根据你路由跳转判断条件来进入对应的路由, / 为路由的 path 。 next(new Error) : 中断路由跳转,错误会被传递给 router.onError() 注册过的回调。 全局路由守卫 beforeEach(to,from, next) beforeResolve(to,from, next) afterEach(to,from) 全局路由直接挂载到 router 实例上。 //全局验证路由constrouter=createRouter({history:createWebHashHistory(),routes});//白名单,不需要验证的路由constwhiteList=['/','/register']router.beforeEach((to,from,next)=>{if(whiteList.indexOf(to.path)===0){//放行,进入下一个路由next()}elseif(!(sessionStorage.getItem('token'))){next('/');}else{next()}}) beforeEach 使用场景 「路由跳转前触发」 作用 「常用于登录验证」 beforeResolve 使用场景 「在 beforeEach 和 组件内beforeRouteEnter 之后,afterEach之前调用。」 afterEach 使用场景 「发生在beforeEach和beforeResolve之后,beforeRouteEnter之前。」 「路由在触发后执行」 单个路由独享 它只有一个 钩子函数, beforeEnter(to,from,next) beforeEnter 使用场景 「在beforeEach之后执行,和它功能一样」 ,不怎么常用 {path:'/superior',component:Superior,meta:{icon:'el-icon-s-check',title:'上级文件'},beforeEnter:(to,form,next)=>{}} 组件路由守卫 特点: 组件内执行的钩子函数 钩子函数: beforeRouteEnter(to,from,next) beforeRouteUpdate(to,from,next) beforeRouteLeave(to,from,next) beforeRouteEnter 使用场景: 路由进入之前调用。 不能获取组件 this 实例 ,因为路由在进入组件之前,组件实例还没有被创建。 执行顺序 beforeEach 和独享守卫beforeEnter之后,全局beforeResolve和全局afterEach之前调用. beforeRouteUpdate 使用场景: 在当前路由改变时,并且该组件被复用时调用,可以通过this访问实例。 当前路由query变更时,该守卫会被调用。 beforeRouteLeave 使用场景: 导航离开该组件的对应路由时调用,可以访问组件实例this 路由守卫执行的完整过程 导航被触发 执行 组件内部路由守卫: beforeRouteLeave 执行 全局路由守卫 beforeEach 在重用组件内部路由守卫钩子 beforeRouteUpdate 执行 路由中的钩子 beforeEnter 在被激活的组件里调用 beforeRouteEnter 执行 全局的 beforeResolve 守卫 。 执行 全局的 afterEach 钩子 beforeCreate created beforeMount mounted 执行 beforeRouteEnter的next的回调 ,创建好的组件实例会作为回调函数的参数传入。 React Hook | 必 学 的 9 个 钩子 Vue权限路由思考 Vue 组件通信的 8 种方式 MYSQL常用操作指令 TypeScript学习指南(有PDF小书+思维导图) 原创不易,素质三连 本文分享自微信公众号 - 前端自学社区(gh_ce69e7dba7b5)。如有侵权,请联系 support@oschina.cn 删除。本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

优秀的个人博客,低调大师

postgresql 用户安全配置

一、配置说明: 角色名称:user01 1.user01权限说明: 连接test数据库,未授权时无法连接其它数据库; 在指定schema,建立\查看\删除表,查看schema中对象; 2.其它普通用户: 无法连接test数据库及schema(sales)中对象,需要授权; 二、操作步骤: instance(实例级): role(角色) $ psql postgres postgres=# CREATE ROLE user01 LOGIN NOSUPERUSER NOCREATEDB; 2.database(数据库级): CREATE(schemas) and CONNECT(database) $ psql postgres postgres=# CREATE DATABASE test; postgres=# REVOKE ALL ON DATABASE test FROM public; -- 禁止其它普通role连接test postgres=# GRANT CONNECT ON DATABASE test TO user01; 3.schema(架构级): CREATE(put object into schema) USAGE (allow us to actually look into a schema and see which objects are present). $psql test test=# REVOKE ALL ON SCHEMA public FROM public;-- 其它普通role无法连接test test=# CREATE SCHEMA sales; CREATE SCHEMA test=# GRANT CREATE,USAGE ON SCHEMA sales TO user01; -- user01 可以在sales中建立、查看对象 GRANT test=# \q $ psql test -U user01 test=> CREATE TABLE sales.t_sales (id int4); CREATE TABLE 4.table(表级): grant 默认user01创建、drop表和DML表内容 5.column(列级):grant 默认user01创建、drop表和DML列内容 本文转自 pgmia 51CTO博客,原文链接:http://blog.51cto.com/heyiyi/1871200

优秀的个人博客,低调大师

NOSQL安全攻击

摘自:http://www.infoq.com/cn/articles/nosql-injections-analysis JSON查询以及数据格式 PHP编码数组为原生JSON。嗯,数组示例如下: array(‘title’ => ‘The Hobbit’, ‘author’ => ‘J.R.R. Tolkien’); 将由PHP编码为以下JSON格式: {“title”: “The Hobbit”, “author”: “J.R.R. Tolkien”} 如果一个PHP具有登录机制,由用户浏览器通过HTTP POST(它像HTTP GET一样容易受到攻击)发送过来用户和密码,常见的POST URL编码应该是这样的: username=Tolkien&password=hobbit 后端PHP代码针对该用户对它进行处理并查询MongoDB,如下所示: db->logins->find(array(“username”=>$_ POST[“username”], “password”=>$_POST[“password”])); 这本身合情合理没什么问题,直觉上开发人员可能喜欢用以下查询: db.logins.find({ username: ‘tolkien’, password: ‘hobbit’}) 然而,PHP针对关联数组有个内置的机制,这让攻击者有机可乘,可发送以下恶意的数据: username[$ne]=1&password[$ne]=1 PHP会把该输入解析为: array(“username” => array(“$[ne] “ => 1), “password” => array(“$ne” => 1));, 它会编码为如下MongoDB查询: db.logins.find({ username: {$ne:1 }, password {$ne: 1 }) 因为$ne是MongoDB用来判定条件是否不相等的,所以它会查询登录集合中的所有用户名称不等于1且密码也不等于1的记录。因此,本次查询将返回登录集合中的所有用户。换成SQL的表述法,就等同于以下查询语句: SELECT * FROM logins WHERE username <> 1 AND password <> 1 在这种情况下,漏洞就为攻击者提供了一个不必有效凭证即可登录应用的方式。在其他变体中,该漏洞可能会导致非法数据访问或由无特权的用户执行特权操作。为缓解这个问题,我们需要转换从需求中接收的参数为适当类型,在本例中,可使用字符串,如下所示: db->logins->find( array(“username”=>(string)$_ POST[“username”], “password”=>(string)$_ POST[“password”])); NoSQL联合查询注入 SQL注入漏洞经常是由于未对用户输入进行适当编码而直接拼接查询造成的。在MongoDB之类的流行数据存储中,JSON查询结构使攻击变得更难了。然而,这并不代表不可能。 让我们看一个通过HTTP POST发送用户名和密码参数到后端的登录表单,它通过拼接字符串的方式得到查询语句。例如,开发人员可能会这么做: string query = “{ username: ‘” + post_ username + “’, password: ‘” + post_passport + ‘ “ }” 具有有效输入时,得到的查询语句是应该这样的: { username: ‘tolkien’, password: ‘hobbit’ } 但具有恶意输入时,这个查询语句会被转换为忽略密码的,在无需密码的情况下登录用户账号。恶意输入示例如下: username=tolkien’, $or: [ {}, {‘a’: ‘a&password=’ }], $comment: ‘successful MongoDB injection’ 该输入会被构建到该查询中: { username: ‘tolkien’, $or: [ {}, { ‘a’: ‘a’, password ‘’ } ], $comment: ‘successful MongoDB injection’ } 只要用户名是正确的,这个查询就可以成功。转换成SQL的表述,这个查询类似于以下语句: SELECT * FROM logins WHERE username = ‘tolkien’ AND (TRUE OR (‘a’=’a’ AND password = ‘’)) #successful MongoDB injection 密码成为这个查询多余的一部分,因为()内的条件总为真,所以不会影响到查询的最终结果。 这是怎么发生的呢?以下为拼接出的查询串,用户输入为加粗字体,剩余的文本串为无格式字体: { username: ‘tolkien’, $or: [ {}, { ‘a’: ‘a’, password ‘’ } ], $comment: ‘successful MongoDB injection’ } 这个攻击在任何只要用户名正确的情况下都将成功,一般得到个用户名并不是什么难事。 NoSQL JavaScript注入 $map = “function() { for (var i = 0; i < this.items.length; i++) { emit(this.name, this.items[i].$param); } }”; $reduce = “function(name, sum) { return Array.sum(sum); }”; $opt = “{ out: ‘totals’ }”; $db->execute(“db.stores. mapReduce($map, $reduce, $opt);”); 这段代码把每个条目按名称给定的$param合计起来。当时,$param预期是接收数量(amount)或价格(price)的,这段代码将按预期进行运转。但是,因为用户输入未被转义,所以恶意输入(它可能包含任意JavaScript)将被执行。 看一下如下输入: a);}},function(kv) { return 1; }, { out: ‘x’ });db.injection. insert({success:1});return 1;db.stores.mapReduce(function() { { emit(1,1 第一部分的数据会闭合最初的MapReduce函数,然后攻击者就可以在数据库上执行想要的JavaScript了(加粗部分)。最终,最后一部分调用一个新的MapReduce以保持被注入代码的原始语句的平衡。在把会被执行的用户输入合并到为字符串后,我们得到以下代码(注入的用户输入加粗显示): db.stores.mapReduce(function() { for (var i = 0; i < this.items.length; i++) { emit(this.name, this.items[i].a); } },function(kv) { return 1; }, { out: ‘x’ }); db.injection.insert({success:1}); return 1;db.stores. mapReduce(function() { { emit(1,1); } }, function(name, sum) { return Array. sum(sum); }, { out: ‘totals’ });” 这个注入看起来与经典的SQL注入非常相似。防御此类攻击的一种方式是在数据库配置中禁止执行JavaScript。如果JavaScript是必需的,那么最好的策略是不使用任何用户输入。 背负式查询 把一个键及相应的值加到使用Memcached的数据库中的一组操作。当从命令行界面调用时,这组函数使用两行输入,第一行是: set <KEY> <FLAG> <EXPIRE_TIME> <LENGTH>, 然后第二行由要保存的数据构成。 当PHP配置的函数被调用时,它接收的两个参数看起来是这样的: $memcached->set(‘key’, ‘value’); 研究人员表示,该驱动程序未能针对带有回车\r(0x0D)和换行的\n(0x0A)的ASCII码采取措施,导致攻击者有机会注入包含有键参数的新命令行和其他非计划内的命令到缓存中8。 看一下如下代码,其中的$param是用户输入并作为键来作用: $memcached=new Memcached(); $memcached ->addServer(‘localhost’,11211); $memcached->set($param, “some value”); 攻击者可以提供以下输入进行注入攻击: “key1 0 3600 4\r\nabcd\r\nset key2 0 3600 4\r\ninject\r\n” 在本例中,增加到数据库中的第一个键是具有“some value”值的key1。攻击者可以增加其他的、非计划内的键到数据库中,即带有“inject”值的key2。 这种注入也可以发生在get命令上。 本文转自张昺华-sky博客园博客,原文链接:http://www.cnblogs.com/bonelee/p/6598106.html,如需转载请自行联系原作者

优秀的个人博客,低调大师

MaxCompute数据安全机制

文章转自dongkai 和传统的计算平台类似,MaxCompute使用多租户隔离租户间的数据。租户内利用访问控制保护用户数据。但是作为一个云计算、大数据平台,MaxCompute在实现时做了一系列的创新。这些创新主要体现在三个方面:1、访问可追溯;2、更细粒度的访问控制;3、跨租户访问控制。 访问可追溯 传统的计算平台都会内建一个账号系统。用户以平台内账号连接计算平台、提交作业。平台的权限控制和审计也使用内部账号而不是真实的用户。MaxCompute作为aliyun的一个产品,直接使用阿里云官网的账号系统。这使得请求的主体更加的真实。用户必须用官网颁发的AccessId请求MaxCompute。MaxCompute通过阿里云官网的身份认证系统确认请求者身份;利用共享密钥机制防止“中间人攻击”。因此MaxCompute所有

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册