同源策略和跨域是Web开发中非常重要的概念,它们涉及到了Web安全以及浏览器如何处理来自不同源的数据。下面将对这两个概念进行更详细的解释。 同源策略(Same-origin policy) 同源策略是一个重要的安全概念,用于防止一个网站上的恶意脚本从另一个来源获取敏感数据。同源策略规定,一个域中的JavaScript代码只能读写来自于同一个域下的文档或COM对象。这是浏览器的一种内置安全机制,用来防止一个页面的脚本从另一个来源加载数据。 根据同源策略,两个资源被视为同源的,如果它们具有相同的: 协议(http、https、file等) 域名(www.example.com、example.c
野猪佩奇 2024-09-28 开发技巧 129
在会话中存储 CSRF Token 比较繁琐,而且不能在通用的拦截上统一处理所有的接口。 那么另一种防御措施是使用双重提交Cookie。利用CSRF攻击不能获取到用户Cookie的特点,我们可以要求Ajax和表单请求携带一个Cookie中的值。 双重Cookie采用以下流程: 在用户访问网站页面时,向请求域名注入一个Cookie,内容为随机字符串(例如csrfcookie=v8g9e4ksfhw)。 在前端向后端发起请求时,取出Cookie,并添加到URL的参数中(接上例POST https://www.a.com/comment?csrfcookie=v8g9e4ksfhw)。 后端接口验
野猪佩奇 2024-09-28 开发技巧 103
Content Security Policy(CSP)是一种计算机安全标准,用于防止跨站脚本攻击(Cross-site scripting, XSS)。它允许Web服务器通过设置HTTP响应头来定义一组指令,这些指令规定了浏览器应该如何加载和执行页面上的资源。这包括脚本、样式表、图像等。 CSP的工作原理是通过告诉浏览器只加载符合指定条件的资源,从而限制了恶意代码执行的可能性。这有助于防止攻击者注入恶意脚本到受信任的网站上,进而保护用户的信息安全。 以下是一个CSP响应头的基本示例: Content-Security-Policy: default-src 'self' 这个简单的策
野猪佩奇 2024-09-28 开发技巧 124
JSON Web Tokens (JWT) 是一种用于在各方之间安全传输信息的紧凑、URL 安全的方式。它常用于认证流程中,以减少每次请求时需要重新验证完整会话信息的情况。然而,正确地存储 JWT 是至关重要的,因为如果存储不当,它们可能会被恶意第三方获取并滥用。 以下是关于如何安全地在 Cookie 和 Web Storage 中存储 JWT 的一些建议: 推荐方案 首选存储在 Local Storage 中。 在安全方面最大的收益便是天然的CSRF免疫,因为不会被浏览器自动发送。 如果你使用了这种方法,后端并不需要花费时间精力来做CSRF相关的防护。 JS可以直接读取JWT,方便使用。
“HTTP Only”是一种安全特性,主要用于保护浏览器与服务器之间的通信,特别是保护存储在客户端的Cookie不被潜在的恶意脚本所访问。下面是对“HTTP Only”属性的详细解释: HTTP Only的作用 安全性增强:标记为HTTP Only的Cookie不能被JavaScript或其他客户端脚本语言所访问。这意味着即使一个网站遭受了跨站脚本(XSS)攻击,攻击者也无法通过脚本语言获取到HTTP Only Cookie中的敏感数据,比如会话ID。 防止数据泄露:由于JavaScript不能访问这些Cookie,所以减少了因脚本注入导致的数
野猪佩奇 2024-09-27 开发技巧 117
要从远程Git仓库拉取代码并覆盖本地更改,您可以使用以下步骤。请注意,这将导致您未提交的本地更改丢失,所以在执行此操作之前,请确保您已经妥善处理了所有工作目录中的更改(要么已提交至仓库,要么您不再需要它们)。 打开命令行工具(如终端或命令提示符),导航到包含.git文件夹的本地仓库目录。 首先检查是否有未提交的更改: git status 如果有未提交的更改,并且您希望保留这些更改,那么您应该先提交或者暂存(stash)这些更改。 推荐在执行覆盖前备份一下当前分支,可以执行如下命令: git checkout -b backup-branch 如果决定覆盖所有本地更改,您可以直接从远程仓库拉取
野猪佩奇 2024-09-22 开发技巧 224
SQL注入是一种网络安全漏洞,它允许攻击者在数据库查询中插入恶意的SQL代码。这种攻击通常发生在应用程序未对用户输入进行适当验证和清理的情况下,使得攻击者可以利用这些漏洞来操纵数据库执行非预期的操作。 SQL注入攻击可能导致以下几种情况: 数据泄露:攻击者可以获取敏感数据,如用户名、密码等。 数据篡改:攻击者可能更改或删除数据库中的数据。 服务拒绝(DoS):攻击者可能使数据库服务不可用。 为了防止SQL注入,可以采取以下措施: 参数化查询:使用预编译的语句和参数绑定来确保用户输入不会被解释为SQL代码。 输入验证:确保所有输入都符合预期格式,并拒绝不符合规则的数据。 最小权限原
野猪佩奇 2024-08-25 开发技巧 139
XSS(Cross-Site Scripting,跨站脚本攻击)是一种常见的网络安全威胁,它利用Web应用程序对用户输入数据处理不当的漏洞,将恶意脚本注入到返回给用户的网页中。当用户浏览这样的网页时,恶意脚本会在用户的浏览器环境中执行,可能导致各种安全问题,包括窃取用户的敏感信息、劫持用户会话、甚至对网站进行更严重的攻击。 XSS 攻击类型 XSS 攻击大致可以分为三种类型: 存储型 XSS:恶意脚本被直接存储在服务器上,然后在每次请求相关页面时被加载和执行。这种类型的 XSS 攻击最危险,因为它持续存在并且影响所有访问该页面的用户。 反射型 XSS:恶意脚本不是存储在服务器上,而是通
野猪佩奇 2024-08-22 开发技巧 186
表驱动方法是一种编程技术和设计模式(scheme),它使用表格来存储和控制程序的行为,而不使用逻辑语句(if和case)。这种方法的核心思想是将程序的一部分逻辑或数据放入一个表中,然后程序可以根据需要查询这个表来决定如何运行。 一个简单的表驱动法实现 假设有段程序要计算某年某月的天数。 private void btnCalculate_Click(object sender, EventArgs e) { //检测输入是否正确 if (!CheckInput()) return; int days = 0 ; int month = Convert.ToI
野猪佩奇 2024-07-26 开发技巧 239
一,什么是图片的著作权?指权利人依法对图片作品享有的专有权利包括人身权和财产权两个方面。常见的专有权利包括复制权、发行权、展览权和信息网络传播权等。根据《中华人民共和国著作权法》的规定,任何人未经权利人的许可,不得使用。更不得歪曲、篡改、剽窃。也不得为了谋取个人名利,在该图片上标署自己的姓名。否则,应当根据情况,承担停止侵害、消除影响、赔礼道歉、赔偿损失等民事责任。版权,或者说是著作权都是针对作品而言的。图片,以及其他形式的内容,首先要是作品,才谈得上有版权。一个像素的图片,一个字的文章,不具备基本的独创性,也很难说有多少智力成果在里面,所以不可能被认定为作品,也就没有版权或著作权可言了。二,
野猪佩奇 2024-02-21 开发技巧 222
选择排序算法简介选择排序大致的思路是找到数据结构中的最小值并将其放置在第一位,接着找到第二小的值并将其放在第二位,以此类推。Python 代码示例def findSmallest(arr): smallest = arr[0] // 存储最小的值 smallest_index = 0 // 存储最小元素的索引 for i in range(1, len(arr)): if arr[i] smallest: smallest = arr[i] smallest_index = i return smallest_index de
野猪佩奇 2023-11-17 开发技巧 466
冒泡排序的英文是bubble sort,它是一种基础的交换排序。正是因为这种排序算法的每一个元素都可以像水中的小气泡一样,根据自身大小,一点一点地向着数组的一侧移动。有8个数字组成一个无序数列 [7, 5, 2, 3, 1],希望按照从小到大的顺序对其进行排序。按照冒泡排序的思想,我们要把相邻的元素两两比较,当一个元素大于右侧相邻元素时,交换它们的位置,当一个元素小于或等于右侧相邻元素时,位置不变。代码实现:function sort(arr){ for(let i=0; i arr.length; i++){ for(let j=0; j arr.length-i-1; j++)
野猪佩奇 2023-11-02 开发技巧 380
一,简单的权限模型有个访问权限列表如下:用户1 -- 查看文件 用户1 -- 编辑文件 用户2 -- 查看文件 用户2 -- 编辑文件 ... 每个用户的每个权限,都保存在该表中,这种直接将权限绑定在用户上的方式就叫做基于用户的权限管理,ACL(Access Control List)。ACL的优点是简单易用、易于理解。缺点是系统逐渐复杂以后,用户和权限直接挂钩,授予权限时比较分散、不能集中管理,增加了复杂性。这时,人们就设计了基于角色的访问控制 RBAC(Role Based Access Control)。二,RBAC 基于角色的访问控制通过角色关联用户,角色关联权限的方式间接
野猪佩奇 2023-11-01 Node.js 开发技巧 461
二分查找法 Python 实现:def binary_search(list, item): low = 0 high = len(list)—1 while low = high: mid = (low + high) guess = list[mid] if guess == item: return mid if guess item: high = mid - 1 else: low = mid + 1 return None my_list = [1, 3, 5, 7, 9]
野猪佩奇 2023-10-23 开发技巧 359
在 JavaScript 中直接输出 0.1 + 0.2 结果是 0.30000000000000004。原因如下:JavaScript 使用 Number类型表示数字(整数和浮点数),计算机遵循IEEE 754标准,所有语言都会有这个问题。通常用64位来表示一个数字:第0位:符号位,0表示正数,1表示负数(s);第1位到第11位:储存指数部分(e);第12位到第63位:储存小数部分(即有效数字)f。十进制转换为二进制方法是,小数本身乘以2,取整数位作为二进制表示位,然后取其小数位参与计算(乘以2),如此循环往复,只至小数位乘以2的结果为零。结果0.1和0.2的二进制,后面无限循环多余的数将会
野猪佩奇 2023-07-17 JavaScript 开发技巧 1108
在浏览器中 RESTful API 执行 delete 返回204无法获取 Body,也就是说执行成功后,只能返回空的。无法获取到返回的 Body 内容。使用 restclient 可以获取到 body。大多数人都认为204是成功删除的良好响应代码,因为通常没有充分的理由在删除某些内容后返回响应正文。所以,如果 delete 操作成功且响应主体为空,则返回204。如果 delete 操作成功且响应主体为非空,则返回200。
\w匹配的仅仅是中文,数字,字母,对于国人来讲,仅匹配中文时常会用到,见下匹配中文字符的正则表达式: [\u4e00-\u9fa5]或许你也需要匹配双字节字符,中文也是双字节的字符匹配双字节字符(包括汉字在内):[^\x00-\xff]注:可以用来计算字符串的长度(一个双字节字符长度计2,ASCII字符计1)更多常用正则表达式匹配规则:英文字母:[a-zA-Z]数字:[0-9]匹配中文,英文字母和数字及_:^[\u4e00-\u9fa5_a-zA-Z0-9]+$同时判断输入长度:[\u4e00-\u9fa5_a-zA-Z0-9_]{4,10}^[\w\u4E00-\u9FA5\uF900-\u
野猪佩奇 2021-12-23 开发技巧 969
进制 (system of numeration)进制也就是进位制。进行加法运算时逢X进一(满X进一),进行减法运算时借一当X,这就是X进制,这种进制也就包含X个数字,基数为X。十进制有 0~9 共10个数字,基数为10,在加减法运算中,逢十进一,借一当十。十进制(Decimalism)使用的数字都是由 0~9 共十个数字组成的,逢十进一,也因为只有 0~9 共十个数字,所以叫做十进制。 人类算数采用十进制,可能跟人类有十根手指有关。 数位有一定的意义,从右往左分别表示个位、十位、百位、千位……二进制(Binary)从十进制计数法类推,使用的数字只有 0、1两种,这就是二进制。例如,数字 0、
野猪佩奇 2021-12-23 开发技巧 690
依赖注入(DI)和控制反转(Ioc) 是从两个不同角度描述的同一个概念。当某个对象(调用者)需要调用另一个对象(被调用者,即被依赖对象)时,调用者通常会采用“new 被调用者”的代码方式来创建对象.在使用某些框架之后,对象的实例不再由调用者来创建,而是由容器来创建,容器负责控制程序之间的关系,控制权由应用代码转移到了框架,被称为“控制反转”。从框架的角度来看,框架负责将被依赖对象赋值给调用者的成员变量,这相当于为调用者注入了它依赖的实例,这就是“依赖注入”。容器,字面上理解就是装东西的东西。在这里容器容纳的是对象、对象的描述(类、接口)或者是提供对象的回调,通过这种容器,可以实现 “依赖注入(
野猪佩奇 2021-11-13 开发技巧 748
简介03 年 Eric Evans 的 Domain Driven Design 一书,以及后续 Vaughn Vernon 的 Implementing DDD , Uncle Bob 的 Clean Architecture 等书,真正的从业务的角度出发,为全世界绝大部分做纯业务的开发提供了一整套的架构思路。 POP,OOP,DDD是如何解决问题面向过程编程(POP),接触到需求第一步考虑把需求自顶向下分解成一个一个函数。并且在这个过程中考虑分层,模块化等具体的组织方式,从而分解软件的复杂度。当软件的复杂度不是很大,POP也能得到很好的效果。 面向对象编程(OOP),接触到需求第一步考虑
野猪佩奇 2021-11-11 开发技巧 847
随机推荐
ES6 Promise 和 async/await 教程
WordPress 按自定义排序的两种方法
JavaScript Proxy 代理
HTML 对话框元素 dialog
Node.js 模块概念
使用 svg 作为背景图片
Photoshop 使用插件支持 webp 格式的文件
Express 使用 cookie-session 处理 session