看我如何利用Atom编辑器的漏洞实现远程代码执行
前不久,我研究了一下GitHub的文本编辑器(Atom),并且在Atom中找到了好几个安全。经过了一段时间的分析和研究之后我发现,这些漏洞将允许攻击者在目标用户的设备上实现远程代码执行。我发现了这些漏洞之后,便立刻通过HackerOne将漏洞上报给了Atom,相关问题目前已经在2017年10月12日发布的Atomv1.21.1中成功修复。如果各位同学想深入研究或者复现漏洞的话,可以从【这里】获取GitHub提供的旧版本代码。Web端的安全问题传染给了桌面端AppAtom是一款基于跨平台框架Electron(基于JavaScript、HTML和CSS)开发的文本编辑器,而Electron是一种用来开发桌面应用的工具。但是,这种框架却将自身存在的Web端安全缺陷传染给了桌面端应用,即跨站脚本漏洞(XSS)。这种应用程序是通过JavaScript实现的,如果其中存在XSS漏洞,那么就有可能导致攻击者实现任意代码执行。当然了,我们现在也有很多方法来缓解Electron中的XSS所带来的影响,但如果解决方案部署不当,那么攻
自己动手做一个识别手写数字的 Web 应用(四)
接着往期的3篇继续,一步步动手做:自己动手做一个识别手写数字的web应用01自己动手做一个识别手写数字的web应用02自己动手做一个识别手写数字的web应用03如果你练习里前面三篇,相信你已经熟悉了Docker和Keras,以及Flask了,接下来我们实现一个提供给用户输入手写字的前端web页面。前端画板我们可以自己用最基本的canvas写,也可以选择封装好的开源库:下面介绍2个比较好的模拟手写效果的画板库:1signature_padhttps://github.com/szimek/signature_pad/2drawingboard.jshttps://github.com/Leimi/drawingboard.js这边我选择的是signature_pad。HTML代码:
html5知识点:CSS3新增选择器
css3选择器是在css2.0的基础上的修改创新。他增加了一些UI元素状态伪类选择器、结构伪类选择器、属性选择器等。Css3新增的这些选择器很多强大,他的出现给我们前端带来了好多便利。一、使我们的网页代码更简洁、结构更加清晰,结构清晰就会有利于SEO(搜索引擎)的优化,代码简洁说明代码会少,代码少文件就会小,占用的网络带宽就会少,那么网页的加载速度就会快,用户体验度就会更好。例如::first-child是用来选择某个元素的第一个子元素,比如你想让列表中的”1”具有与众不同的样式,我们就可以使用:first-child来实现:li:first-child{background:#ff0;}在没有这个选择器出现之前,我们都需在要第一个li上加上一个不同的class名,比如说“first”,然后在给他应用不同的样式li.first{background:#ff0;}其实这两种最终效果是一样的,只是后面这种,我们需要在html增加一个额外的class名。二、免除起名的烦恼,之前我们用css2.0写一个网站需要给标签添加i
WPF开发的彩票程序(练手好例子) 附源码
前言WPF是.NET最新的界面开发库,开发界面非常灵活!但是学习WPF难度也非常大。应朋友之邀,编写了一个小程序。程序虽小,五脏俱全,WPF开发的灵活性可窥见一斑。对于新手学习有很好的借鉴意义,代码已上传到CSDN可以下载。网址见文章底部。功能说明分析彩票的历史记录,根据选取的几个数据,分析记录出现的情况。看下图。左边是历史记录,右边是选取的数据68、8*。从历史记录查找,符合这个逻辑关系的数据。技术解析我这里分析几个小技术点。1)ListView不同行颜色设定ListView有一个属性ItemContainerStyleSelector,这个属性可以绑定到一个类,你可以在这个类中,根据每行的属性,设定背景。1publicclassListViewItemStyleSelector:StyleSelector2{3publicoverrideStyleSelectStyle(objectitem,DependencyObject
C#设计模式之十七观察者模式(Observer Pattern)【行为型】
C#设计模式之十七观察者模式(ObserverPattern)【行为型】一、引言今天是2017年11月份的最后一天,也就是2017年11月30日,利用今天再写一个模式,争取下个月(也就是12月份)把所有的模式写完,2018年,新的一年写一些新的东西。今天我们开始讲“行为型”设计模式的第四个模式,该模式是【观察者模式】,英文名称是:ObserverPattern。还是老套路,先从名字上来看看。“观察者模式”我第一次看到这个名称,我的理解是,既然有“观察者”,那肯定就有“被观察者”了,“观察者”监视着“被观察者”,如果“被观察者”有所行动,“观察者”就会做出相应的动作来回应,哈哈,听起来是不是有点像“谍战”的味道。我所说的谍战不是天朝内的那种,比如:手撕鬼子,我说的是“谍影重重”的那类优秀影片,大家懂得。“观察者模式”在现实生活中,实例其实是很多的,比如:八九十年代我们订阅的报纸,我们会定期收到报纸,因为我们订阅了。银行可以给储户发手机短信,也是“观察者模式”很好的使用的例子,因为我们订阅了银行的短信业务,当我们账户余额发生变化就会收到通知
.net 系列:并发编程之一【并发编程的初步理论】
一、关于并发编程的几个误解1)并发就是多线程实际上多线程只是并发编程的一种形式而已,在C#中还有很多其他的并发编程技术,包括异步编程,并行编程,TPL数据流,响应式编程等。2)只有大型服务器才需要考虑并发服务器端的大型程序要响应大量客户端的数据请求,当然要充分考虑并发。但是桌面程序和手机、平板等移动端应用同样需要考虑并发编程,因为它们是直接面向最终用户的,而现在用户对使用体验的要求越来越高。程序必须能随时响应用户的操作,尤其是在后台处理时(读写数据、与服务器通信等),这正是并发编程的目的之一。3)并发编程很复杂,必须掌握很多底层技术C#和.NET提供了很多程序库,并发编程已经变得简单多了。尤其是.NET4.5推出了全新的async和await关键字,使并发编程的代码减少到了最低限度。并行处理和异步开发已经不再是高手们的专利,每个开发人员都能写出交互性良好、高效、可靠的并发程序。二、并发的几个名称术语并
activeMq消息转投rabbitMq研究
在研究activemq转投消息到rabbitmq的过程中还是发现了很多有趣的细节。消息发送端分为PERSISTENT与NON_PERSISTENT,该类型表示是否持久化消息到数据库中。Activemq默认使用kahaDB。我大Q9使用的也是kahaDB。当然也是支持mysql等数据库的。具体配置在${activemq.base}/conf/activemq.xml中。
Learning Apache Flink(API)
本文是参考ApacheFlinkv1.3官方文档,本文所使用的是scala版本的API,基础架构参见《LearningApacheFlink(BASIC)》业务场景Flink接kafka的数据,然后通过初步的过滤得到一个结果集,再进行“打标签”,最后对“打标签”的结果进行过滤,最终输出到kafka中。例如,在topicfoo中的数据表示"imsi,lac,cell",先通过imsi字段筛选出所有以460开头的字段,再通过lac和cell字段判断是否在指定的区域,增加一个字段isSpecifiedLocation,值为true或者false。最终输出到kafka中的字段为"imsi,lac,cell,isSpecifiedLocation,timestamp",且isSpecifiedLocation为true。Flink读kafka数据注:本文中所使用的kafka的版本为0.10.0官方文档中ProvidedTableSources针对kafka指提供了json和avro格式的接入,所以如果是在topic中的数据是csv格式的
Kafka常用命令
本文基于Kafka0.10.0基本操作列出所有topickafka-topics.sh--zookeeperlocalhost:2181--list创建topickafka-topics.sh--zookeeperlocalhost:2181\--create\--topicearth\--partitions1\--replication-factor1生产数据向earth发送一条消息echo"Thefirstrecord"|kafka-console-producer.sh\--broker-listlocalhost:9092\--topicearth向earth发送一条包含key的消息echo'00000,{"name":"Steve","title":"CaptainAmerica"}'|kafka-console-producer.sh\--broker-listlocalhost:9092\--topicearth\--propertyparse.key=
简单实现Android中的消息循环机制
做安卓的同学对Handler并不陌生,通过它可以方便的实现线程切换及定时任务,是线程通信的利器。安卓应用本身就是事件驱动的消息轮询模型,系统中的各个组件的正常工作也离不开Handler的支持。其背后的Message、Looper、MessageQueue为这套机制提供了充足的保障。相信大家已经看过不少消息循环机制的源码分析了,出于学习目的,这次让我们一起实现一个简单的消息循环机制。我们希望在javaSE上实现一个跨平台的消息循环机制,可以做到线程间通讯并支持发送延时消息。线程同步方面选用jdk提供的重入锁(非必须,可选其他)配合Condition完成线程的休眠与唤醒。与AndroidSDK类似,通过MessageQueue对象实现消息队列,通过Handler对象实现消息的发送与处理。但Message与Looper都相应做了简化,只实现核心部分。放一张类图镇镇场子:消息队列组织为链表形式,通过MessageQueue对象维护。Handler创建一条消息,将其插入到MessageQueue维护的链表中。因为有延时消息的存在,队列中的消息
【译】数据显示:中国的程序员是世界上最牛的程序员
写在前面:一直觉得中国的程序员想法多,肯钻研肯学习,但却不知道原来中国的程序员是世界上最牛的程序员。说来可能不信,但根据HackerRank官网的一篇报道,数据显示中国的程序员就是世界上最牛的程序员。特将此文翻译成中文,分享给大家。如果问哪里的程序员最牛,很多人肯定会认为是美国。毕竟美国拥有很多杰出的程序员,如比尔·盖茨、肯·汤普森、C语言之父丹尼斯·里奇、唐纳德·克努特。但是,这些年,印度的程序员规模增长是全世界最快的,俄罗斯的黑客也越来越锋芒毕露。有什么办法来确定哪个国家的程序员是最牛的吗?在HackerRank网站上,哪些国家在编程挑战赛中表现最厉害呢?通过数据,我们希望可以找到问题的答案。在HackerRank网站上,为了帮助程序员提高技能,我们举行过数以千计的编程挑战赛。来自世界各地成千上万的程序员参加了这些挑战赛,从Python到算法到安全到分布式系统都有涉及。我们的社区也有超过150万开发者的排名,并且社区的人数每天都在增长。根据我们的数据显示,中国和俄罗斯拥有最具才华的程序员。中国程序员在数学、
讨厌算法的程序员 1 - 插入排序
什么是算法在说插入排序之前,我们了解下《算法导论》对算法的从两种不同角度的定义。一般性解释:算法是定义良好的计算过程,它取一个或一组值作为输入,并产生出一个或一组值作为输出。基于应用的解释:算法是一种工具,用来解决一个具有良好规格说明的计算问题。该问题的描述可以用通用的语言,来规定所需的输入/输出关系。与之对应的算法则描述了一个特定的计算过程,用于实现这一输入/输出关系。后一种解释在告诉我们,我们不必对于每个问题都去重新设计、证明和实现算法,而是有能力将实际问题转换成已知算法问题,然后选取合适的解法。而这种能力就是学习算法的目的所在。这要求我们不仅要积累算法知识,还要在更高的抽象层次上理解算法的方法论。排序问题的形式定义排序问题是算法要解决的一个基本问题。它的形式化定义如下:输入:n个数的一个序列[a1,a2,...,an]。输出:输出序列的一个排列[a1',a2',...,an'],满足a1'≤a2'≤...≤an'。插入排序算法插入排序算法,对于少量元素的排序问题,是一个有效的算法
视频演讲: 从0到1再到100,创业不同阶段的技术管理思考
个人简介蔡锐涛,有米科技创始合伙人&CTO,EGO会员,专注于高性能服务器架构及处理能力研究,使公司在用户特征识别、精准投放、客户端防作弊、广告智能投放等关键技术领域取得行业领先。全球架构师峰会(International-Architect--Summit,下简称ArchSummit)是由InfoQ中文站主办的一次全球性架构师峰会。ArchSummit专门针对架构师人群,讲述与架构和架构师相关的各方面趋势、技术和案例。这也是继QCon之后,InfoQ中文站主办的又一次高端技术盛会。
javaScript数据类型你都弄明白了吗?绝对干货
数据类型的分类JavaScript的数据类型分为两大类,基本数据类型和复杂数据类型。基本数据类型:Null、Undefined、Number,String,Boolean。复杂数据类型:Object。一、Object《JavaScript语言精辟》这本书里面是这么定义的:数组是对象,函数是对象,正则表达式也是对象,当然,对象也是对象。JavaScript包括一个原型链特性,允许对象继承另一个对象的属性,正确的使用它能减少对象初始化的时间和内存消耗。二、undefined这个数据类型只有一个值,就是undefined,它是在var了一个变量之后没有对其初始化的结果。vara;console.log(a)//undefined三、null这个数据类型也只有一个值,就是null,他表示的是一个空指针对象,这也是typeof类型检测null为什么返回object的原因。如果我们申明一个变量是为了在以后保存某个值,那么现在我们就把null赋值给它,而不是其他的值。然后我们就可以判断它的值进行一系列的操作。//例如var
搞定所有的跨域请求问题 : jsonp & CORS
网上各种跨域教程,各种实践,各种问答,除了简单的jsonp以外,很多说CORS的都是行不通的,老是缺那么一两个关键的配置。本文只想解决问题,所有的代码经过亲自实践。本文解决跨域中的get、post、data、cookie等这些问题。本文只会说get请求和post请求,读者请把post请求理解成除get请求外的所有其他请求方式。JSONPjsonp的原理很简单,利用了【前端请求静态资源的时候不存在跨域问题】这个思路。但是只支持get,只支持get,只支持get。注意一点,既然这个方法叫jsonp,后端数据一定要使用json数据,不能随便的搞个字符串什么的,不然你会觉得结果莫名其妙的。前端jQuery写法$.ajax({type:"get",url:baseUrl+"/jsonp/get",dataType:"jsonp",success:function(response){$("#response").val(JSON.stringify(response));
常见的布局类问题及面经
方案二左设置左浮动、右边也左浮动但是使用calc去补宽度长度计算(方案一二没有完全分层).left{float:left;}.right{width:calc(100vw-200px);}-【分析】浮动。(注意:为了不影响其他元素,别忘了在父级上清除浮动)calc()=calc(四则运算)用于在css中动态计算长度值,需要注意的是,运算符前后都需要保留一个空格,例如:width:calc(100%-10px);vw:viewportwidth。1vw=viewport宽度的1%,100vw=viewportwidth,同样的还有vh:viewportheight。1vw=viewport高度的1%,100vh=viewportheight。浏览器支持情况:主流浏览器、IE10+vw和vh会随着viewport的变化而变化,因此十分适合于自适应场景来使用。方案三父容器设置display:flex;right部分设置f
Tailwind CSS ——定制化快速 UI 开发 CSS 框架
Tailwind是一个用于快速UI开发的实用工具集CSS框架,设计理念是以实用为先,它提供了高度可组合的应用程序类,可帮助开发者轻松构建复杂的用户界面。它还提供了一个从实用模式中提取组件的工具,响应式风格可以满足不同设备上的开发。与Bootstrap、Foundation或Bulma等框架不同,TailwindCSS并不是UI套件,因为它没有没有内置的UI组件,也没有默认的主题,完全需要开发者根据自身情况来定制设计。Tailwind仅仅是一个CSS框架,它还是构建设计系统的引擎。constcolorPalette={//...'grey-lighter':'#f3f7f9',//...}module.exports={//...backgroundColors:colorPalette,borderColors:{default:colorPalette['grey-lighter'],...colorPalette,},//...}示例:下面是一个用Tailwind
基于 HTML5 WebGL 的 3D 仓储管理系统
基于HTML5WebGL的3D仓储管理系统仓储管理系统(WMS)是一个实时的计算机软件系统,它能够按照运作的业务规则和运算法则,对信息、资源、行为、存货和分销运作进行更完美地管理,使其最大化满足有效产出和精确性的要求。从财务软件、进销存软件CIMS,从MRP、MRPII到ERP,代表了中国企业从粗放型管理走向集约管理的要求,竞争的激烈和对成本的要求使得管理对象表现为:整和上游、企业本身、下游一体化供应链的信息和资源。而仓库,尤其是制造业中的仓库,作为链上的节点,不同链节上的库存观不同,在物流供应链的管理中,不再把库存作为维持生产和销售的措施,而将其作为一种供应链的平衡机制,其作用主要是协调整个供应链。但现代企业同时又面临着许多不确定因素,无论他们来自分供方还是来自生产或客户,对企业来说处理好库存管理与不确定性关系的唯一办法是加强企业之间信息的交流和共享,增加库存决策信息的透明性、可靠性和实时性。而这,正是WMS所要帮助企业解决的问题。WMS软件和进销存管理软件的最大区别在于:进销存软件的目标是针对于特定对象(如仓库)的商品、单据流动
十一、VueJs 填坑日记之使用Amaze ui调整列表和内容页面
上一篇博文我们整合了Amazeui,并且调整了一个头部header和底部footer文件,其实做起来也很简单,只要按照步骤来做,完全没有问题。今天我们来重新调整一下列表页面和内容页面,使我们做的后台管理系统更有范儿。制作左侧菜单一个后台管理系统,大致的样式都是分为南北东西的,而西(也就是左侧)一般是我们的菜单。如图:我们今天就来把我们的项目完成到如上图的样式,首先我们来制作左侧的菜单,在/src/components/下新建menu.vue。代码如下:
后台工作者HangFire与ABP框架Abp.Hangfire及扩展
HangFire与Quartz.NET相比主要是HangFire的内置提供集成化的控制台,方便后台查看及监控,对于大家来说,比较方便。HangFire是什么Hangfire是一个开源框架(.NET任务调度框架),可以帮助您创建,处理和管理您的后台作业,处理你不希望放入请求处理管道的操作:通知/通讯;xml,csv,json批量导入;创建档案;发射webhooks;删除用户;建立不同的图表;图像/视频处理;清除临时文件;反复出现的自动报告;数据库维护Hangfire支持所有类型的后台任务-短时间运行和长时间运行,CPUintensive和I/Ointensive,一次性的和经常性的。你不需要重新发明轮子,可以直接使用。Hangfire包含三大核心组件:客户端、持久化存储、服务端。看看官方的这张图:Hangfire基础基于队列的任务处理(Fire-and-forget)延迟作业也只执行一次,但不会立即执行-只能在指定的时间间隔后执行。varjobId=BackgroundJob.Schedule(