什么是跨站请求伪造 跨站请求伪造(英语:Cross-site request forgery),也被称为 one-click attack 或者 session riding,通常缩写为 CSRF 或者 XSRF, 是一种挟制用户在当前已登录的Web应用程序上执行非本意的操作的攻击方法。【1】 跟跨网站脚本(XSS)相比,XSS 利用的是用户对指定网站的信任,CSRF 利用的是网站对用户网页浏览器的信任。 想了解更多,请查看维基百科上的详细介绍。 ##使用 Asp.Net Core 内置的 Antiforgery Asp.Net Core 应用中内置了 Microsoft.Asp... 阅读全文

需要一个远程桌面 App 进行演示, 安装 Windows 远程桌面服务太折腾, 需要安装域控制器, 再部署一整套的远程服务, 太折腾了, 如果只是演示的话, 没必要那么折腾。 本文介绍一种通过修改注册表来启用远程应用的方法, 可以用于远程应用演示。 在 Windows 上允许远程桌面访问 这个没什么好说的, 非常简单, 在系统属性中设置允许远程连接到此计算机即可。 修改注册表, 创建远程应用 打开注册表编辑器, 导航到 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Ser... 阅读全文

使用 .Net Core 开发 API 时, 有些 API 是需要认证, 添加了 [Authorize] 标记, 代码如下所示: [Route("api/[controller]")] [ApiController] public class AccountController : Controller { [HttpGet("info")] [Authorize] public async Task<ActionResult<AccountInfoModel>> GetInfo() { } } 客户端在没有认证之前, 应该返回 ... 阅读全文

什么是窗口函数? 一个窗口函数在一系列与当前行有某种关联的表行上执行一种计算。这与一个聚集函数所完成的计算有可比之处。但是窗口函数并不会使多行被聚集成一个单独的输出行,这与通常的非窗口聚集函数不同。取而代之,行保留它们独立的标识。在这些现象背后,窗口函数可以访问的不仅仅是查询结果的当前行。 可以访问与当前记录相关的多行记录; 不会使多行聚集成一行, 与聚集函数的区别; 窗口函数语法 窗口函数跟随一个 OVER 子句, OVER 子句决定究竟查询中的哪些行被分离出来由窗口函数处理。 可以包含分区 (PARTITION BY) 和排序 (ORDER BY) 指令, 这二... 阅读全文

简介 将源自 Robert C. Martin 的 Clean Code 的软件工程原则适配到 JavaScript 。 这不是一个代码风格指南, 它是一个使用 JavaScript 来生产 可读的, 可重用的, 以及可重构的软件的指南。 这里的每一项原则都不是必须遵守的, 甚至只有更少的能够被广泛认可。 这些仅仅是指南而已, 但是却是 Clean Code 作者多年经验的结晶。 我们的软件工程行业只有短短的 50 年, 依然有很多要我们去学习。 当软件架构与建筑架构一样古老时, 也许我们将会有硬性的规则去遵守。 而现在, 让这些指南做为你和你的团队生产的 JavaScript... 阅读全文

Script 标记的 defer 和 async 属性可能会显著影响页面加载的性能, 总结说明一下。 没有标记 defer 或 async 时 浏览器立即停止 HTML 渲染,同步获取并执行脚本文件, 然后再继续渲染后续的 HTML 内容。 <header> <script src="app.js"></script> </header> 除非特殊情况, 一般不采取这种做法。 标记 defer 时 异步获取脚本, 不会停止 HTML 渲染, 在 DOM 事件 domInteractive 之后, 开始执行脚本,... 阅读全文

理解组件包含 包含组件就是指可以包含其它组件的组件, 以 Bootstrap 的卡片 (Card) 为例, 它包含页眉 (header) 、 主体 (body) 和 页脚 (footer) , 如下图所示: <div class="card text-center"> <div class="card-header"> Featured </div> <div class="card-body"> <h5 class="card-title">Special title treatment&l... 阅读全文

两年前, 写过一篇使用 rollup 来为生产环境编译 Angular 2 应用的文章, 因为当时还没有 angular-cli 项目。 而如今 Angular 已经到了 7.x 版本, 对应的工具也是非常的完善, 也就不在使用 rollup 来处理 angular 项目。 angular-cli 用起来虽然方便, 但是针对生产环境编译的话, 还是有一些地方要注意的, 接下来就介绍我在项目部署时的一些做法。 合理拆分功能模块, 按需加载 一个系统往往功能非常多, 因此就要根据项目的实际情况划分功能模块,一个功能模块对应一个 NgModule , 编译成一个独立的 js 文件, 再结... 阅读全文

Snow Flake ID 算法简介 Snow Flake 是 Twitter 开源的分布式 ID 生成算法,结果是一个 long 型的 ID。其核心思想是: 使用 41bit 作为毫秒时间戳; 10bit 作为机器的 ID ( 5 个 bit 是数据中心,5 个 bit 的机器 ID ); 12bit 作为毫秒内的流水号(意味着每个节点在每毫秒可以产生 4096 个 ID ); 最后还有一个符号位,永远是 0 。 如下图所示: Snow Flake ID 算法的优点是: 所有生成的 id 按时间趋势递增(时间戳), 方便排序; 整个系统内不会... 阅读全文

NHibernate 最近发布了 5.1.3 版本, 支持 .NET Standard 2.0 , 这意味着可以在 .NET Core 2.0 应用中使用, 本文就已 WebAPI 应用为例, 介绍一下如何在 .NET Core 应用中如何使用 NHibernate 。 1、 新建一个基于 .NET Core 的 Web API应用, 命令如下: mkir WebApiTest cd WebApiTest/ dotnet new webapi 2、 添加 NHibernate 包以及对应的数据库驱动程序(以 Npgsql 为例): dotnet add pakcage NHi... 阅读全文

关于 DataX DataX 是阿里巴巴集团内被广泛使用的离线数据同步工具/平台,实现包括 MySQL、Oracle、SqlServer、Postgre、HDFS、Hive、ADS、HBase、TableStore(OTS)、MaxCompute(ODPS)、DRDS 等各种异构数据源之间高效的数据同步功能。 如果想进一步了解 DataX ,请进一步查看 DataX 详细介绍 。 关于增量更新 DataX 支持多种数据库的读写, json 格式配置文件很容易编写, 同步性能很好, 通常可以达到每秒钟 1 万条记录或者更高, 可以说是相当优秀的产品, 但是缺乏对增量更新的内置... 阅读全文

ASP.NET Core 已经发布了 2.0 RC1 (Go Live) 版本, API 已经不在变化, 但是很多人期待的已久的在虚拟目录中部署的功能还是没有出现, 看来只能自己想办法解决这个问题了。 由于 ASP.NET Core 有自己的服务器进程 (kestrel) , 在部署时通常是采用反向代理转发的形式, 对于应用服务器的集成上, 不如传统的 ASP.NET 应用那么友好, 比如在应用服务器的虚拟目录中部署, 一直没有很好的方案。 ASP.NET Core 有一个 UsePathBase 扩展方法, 使用一个中间件向当前 http 请求中添加或者移除根路径 (Pathbas... 阅读全文