批注[……]	表示他人、自己、网络批注参考资料来源于* 书中批注* CSDN* GitHub* Google* 维基百科* YouTube* MDN Web Docs由于编写过程中无法记录所有的URL所以如需原文,请自行查询{……}	重点内容*……*	表示先前提到的内容,不赘述「第二篇」客户端脚本安全0.6本书结构就当前比较流行的客户端脚本攻击进行了深入阐述,当网站的安全做到一定程度后,黑客很难找到类似注入攻击、脚本执行等高风险的漏洞,从而可能将注意力转义到客户端脚本攻击上客户端脚本安全于浏览器的特性息息相关,因此对浏览器的深入理解将有助于做好客户端脚本安全的解决方案「第三章」跨站脚本攻击(XSS)[0x00转义字符首先要认识一下\,\在JavaScript有着特殊的用途,它是转义的符号e.g.\x3C\x73\x63\x72\x69\x70\x74\x3E\x61\x6C\x65\x72\x74\x28\x27\x70\x6F\x72\x75\x69\x6E\x27\x29\x3C\x2F\x73\x63\x72\x69\x70\x74\x3E这些就是经过编码后的字符,因为前面的\缘故,所以后面的这些字符在JavaScript中都会被还原接受用户的数据后过滤<>,再用JavaScript显示出来,输入经过16进制转换后的字符,这些字符都可以轻松的绕过过滤,完整进入代码中,经过JavaScript还原之后,正确解释出来0x01UBB标签UBB标签是目前广泛运用到论坛,留言簿,以及其他网站系统的一种编码标签,类似[img]url[/img]这样的,用户在中间输入地址后即可,在发表的时候系统会自动改成<img src=”url”></img>,这个URL就是用户输入的图片地址,XSS攻击中,可以利用这个特点来达到无需用户输入<>就能执行由用户所输入的代码,我们只要在输入网址的地方输入:x"/**/οnerrοr="alert(‘poruin’)那么经过转换后就变成了<img src=“x”/**/οnerrοr=“alert(‘poruin’)”>0x02JS中的编码还原函数最常用的就是String.fromCharCode了,这个函数用于ASCII码的还原,一般来说,这个函数都要配合eval()来使用才有效果在跨站中,String.fromCharCode主要是使到一些已经被列入黑名单的关键字或语句安全通过检测,把关键字或语句转换成为ASCII码,然后再用String.fromCharCode还原,因为大多数的过滤系统都不会把String.fromCharCode加以过滤,例如关键字alert被过滤掉,那就可以这么利用:<img src=“x”/**/οnerrοr=“eval(String.fromCharCode(97,108,101,114,116,40,39,112,111,114,117,105,110,39,41))”>][0x00前端过滤burp抓包改包绕过0x01双写绕过0x02事件绕过onclickonmousemove0x03大小写绕过0x04注释干扰绕过<scri<!--test-->pt>alert(1),<scr<!--teat-->ipt>0x05伪协议绕过111">a href="javascript:alert(document.domain)">xss</a><table background="javascript:alert(/xss/)"></table><img src ="javascript:alert('xss';")>0x06空格回车Tab绕过空格<img src="jav    ascript:alert('xss');">Tab<img src="javasc	ript:alert('xss');">回车<img src="javascript:alert('xss'):">0x07编码绕过base64编码eval("")eval函数把字符串当作程序执行atob函数是将base64密文转换为明文"><script>eval(atob('YWxlcnQoZG9tYWluKQ=='));</script>base64编码多用于如下两种情况<a herf="可控点"><iframe src="可控点">如果过滤了<、>、'、"、script,可以使用base64编码<a herf="data:text/html;base64,PGItZyBzcmM9eCBvbmVycm9yPWFsCXJ0KDEpPg==">test</a>这样当tast A链接点击时,就会以data协议,页面以html/test的方式解析,编码为base64,然后点击a链接时,base64的编码就被还原成原本的<img src=x onerror=alert(1)>JS编码八进制三个八进制数字,如果不够,在前面补0e.g.e = \145十六进制两个十六进制数字,如果不够,在前面补0e.g.e = \x65十六进制前面加\x可以被JS识别<>被转义时,利用十六进制绕过\\x3cscript\\x3ealert(document.domain);\\x3c/script\\x3eUnicode四个十六进制数字,如果不够,在前面补0e.g.e = \u0065十六进制前面加\u00变成可被JS识别的Unicode编码\\uoo3cscript\\u003ealert(document.domain);\\u003c/script\\u003e对于一些控制字符,使用特殊的C类型的转义风格(\r、\n)HTML实体编码字符编码十进制、十六进制编码,样式为"&#数值;"{浏览器是不会在html标签里解析js编码的,所以我们在onerror=后面放js中的编码是不会被解析,你放进去是什么,就是什么}HTML5新增的实体命名编码&colon; = [:]&NewLine; = [Line feed]<a href="javasc&NewLine;ript&colon;alert(1)">click</a>URL编码进行两次URL前编码0x08CSS利用IE特性绕过IE中‘’可以闭合一个“"onmousemove=alert(1)利用CSS特性绕过设置background:url,利用JavaScript伪协议执行jsbackground-color:#f00;background:url("javascript:alert(document.domain);");IE中利用CSS出发xssCSS中的注视/**/xss:expres/**/sion(if(!window.x){alert(document.domain);window.x=1;})]「3.1XSS简介」XSS(Cross Site Script)跨站脚本攻击XSS攻击通常指黑客通过HTML注入篡改了网页,插入了恶意脚本,从而在用户浏览网页时,控制用户浏览器的一种攻击因为在最开始的时候XSS攻击的演示案例首跨域对,所以叫跨站脚本分类1.反射型XSS简单地把用户输入的数据反射给服务器黑客需要诱惑用户点击一个恶意链接,才能完成攻击又称非持久型XSS(Non-persistent XSS)[前端--->后端--->前端]2.存储型XSS把用户输入的数据存储在服务器端具有很强的稳定性又称持久型XSS(Persistent XSS)[前端--->后端--->数据库--->前端]3.DOM Based XSS(DOM型XSS)通过修改页面的DOM节点形成的XSS[前端]「3.2XSS攻击进阶」3.2.1初探XSS PayloadXSS攻击成功后,攻击者能够对用户当前浏览的页面植入恶意脚本,通过恶意脚本,控制用户的浏览器这些用以完成各种具体功能的恶意脚本,被称为XSS PayloadXSS Payload实际上就是JavaScript脚本,还可以是Flash或其他富客户端的脚本,所以JavaScript能做到的功能,XSS Payload也能做到一个最常见的XSS Payload就是通过读取浏览器的Cookie对象,从而发起Cookie劫持的攻击Cookie中一般加密保存了当前用户的登录凭证,如果Cookie丢失,就意味着用户的登录凭证丢失,攻击者就可以不通过密码,直接进入用户的账户3.2.2强大的XSSPayload3.2.2.1构造GET与POST请求[特点http的特点基于tcp/ip、一种网络应用层协议、超文本传输协议HyperText Transfer Protocol工作方式客户端请求服务端应答的模式快速无状态连接灵活可以传输任意对象,对象类型由Content-Type标记客户端请求request消息* 请求行(request line)* 请求头部(header)* 空行* 请求数据服务端响应response由四个部分组成* 状态行* 消息报头* 空行* 响应正文请求方法http请求可以使用多种请求方法HTTP1.0定义了三种请求方法* GET* POST* HEADHTTP1.1新增了五种请求方法* OPTIONS* PUT* DELETE* TRACE* CONNECT HTTP2.0 新的二进制格式(Binary Format),HTTP1.x的解析是基于文本基于文本协议的格式解析存在天然缺陷,文本的表现形式有多样性,要做到健壮性考虑的场景必然很多,二进制则不同,只认0和1的组合基于这种考虑HTTP2.0的协议解析决定采用二进制格式,实现方便且健壮多路复用(MultiPlexing),即连接共享,即每一个request都是是用作连接共享机制的一个request对应一个id,这样一个连接上可以有多个request,每个连接的request可以随机的混杂在一起,接收方可以根据request的id将request再归属到各自不同的服务端请求里面header压缩,如上文中所言,对前面提到过HTTP1.x的header带有大量信息,而且每次都要重复发送,HTTP2.0使用encoder来减少需要传输的header大小,通讯双方各自cache一份header fields表,既避免了重复header的传输,又减小了需要传输的大小服务端推送(server push),同SPDY一样,HTTP2.0也具有server push功能https://baike.baidu.com/item/HTTP%202.0/12520156?fr=aladdin* GET请求指定的页面信息,并返回实体主体* HEAD类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头* POST向指定资源提交数据进行处理请求(例如提交表单或者上传文件),数据被包含在请求体中,POST请求可能会导致新的资源的建立和/或已有资源的修改* PUT从客户端向服务器传送的数据取代指定的文档的内容* DELETE请求服务器删除指定的页面* CONNECT HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器* OPTIONS允许客户端查看服务器的性能* TRACE回显服务器收到的请求,主要用于测试或诊断区别http协议最常见的两种方法GET和POST,这几点答案其实有几点并不准确* 请求缓存GET会被缓存,而post不会* 收藏书签GET可以,而POST不能* 保留浏览器历史记录GET可以,而POST不能* 用处get常用于取回数据,post用于提交数据* 安全性post比get安全* 请求参数querystring是url的一部分get、post都可以带上,get的querystring(仅支持urlencode编码),post的参数是放在body(支持多种编码)* 请求参数长度限制get请求长度最多1024kb,post对请求数据没有限制误区针对上面常见的区别,如果面试的时候这么说,肯定是有很大的毛病,刚在学校面试的时候也曾经囫囵吞枣地这样说过,现在回过头再想以前的错误认知,又有许多新的认识用处请求参数get是querystring(仅支持urlencode编码),post是放在body(支持多种编码)query参数是URL的一部分,而GET、POST等是请求方法的一种,不管是哪种请求方法,都必须有URL,而URL的query是可选的请求参数长度限制下面对各种浏览器和服务器的最大处理能力做一些说明* IE浏览器对URL的最大限制为2083个字符* Firefox(Browser)对于Firefox浏览器URL的长度限制为65536个字符* Safari(Browser)URL最大长度限制为80000个字符* Opera(Browser)URL最大长度限制为190000个字符* Google ChromeURL最大长度限制为8182个字符* Apache(Server)能接受最大url长度为8192个字符* Microsoft Internet Information Server(IIS)能接受最大url的长度为16384个字符为了符合所有标准,url的最好不好超过最低标准的2083个字符(2k+35)当然在做客户端程序时,url并不展示给用户,只是个程序调用,这时长度只收web服务器的影响了最常见的form表单,浏览器默认的form表单,默认的content-type是application/x-www-form-urlencoded,提交的数据会按照key-value的方式,jquery的ajax默认的也是这种content-type在post方式中添加querystring一定是可以接收的到,但是在get方式中加body参数就不一定能成功接收到了post不比get安全性要高这里的安全是相对性,并不是真正意义上的安全,通过get提交的数据都将显示到url上,页面会被浏览器缓存,其他人查看历史记录会看到提交的数据,而post不会,另外get提交数据还可能会造成CSRF攻击http状态码1xx - 信息提示100 Continue - 继续101 Switching Protocols - 切换协议2xx - 成功200 OK - 客户端请求已成功201 Created - 已创建202 Accepted - 已接受203 Non-Authoritative Information - 非权威性信息204 No Content - 无内容205 Reset Content - 重置内容206 Partial Content - 部分内容3xx - 重定向300 Multiple Choices - 多种选择301 Moved Permanently - 对象已永久重定向(对象已永久移走)302 Found - 对象已临时移动303 See Other - 服务器要将浏览器重定向到另一个资源304 Not Modified - 未修改307 Temporary Redirect - 临时重定向308 Permanent Resident - 不允许浏览器将原本为POST的请求重定向到GET请求上4xx - 客户端错误400 Bad Request - 客户端请求到语法错误,服务器无法理解401 Unauthorized - 请求要求用户的身份认证402 Payment Required - 保留,将来使用403 Forbidden - 服务器理解请求客户端的请求,但是拒绝执行此请求404 Not Found - 服务器无法根据客户端的请求找到资源(网页)405 Method Not Allowed - 客户端请求中的方法被禁止406 Not Acceptable - 服务器无法根据客户端请求的内容特性完成请求407 Proxy Authentication Required - 请求要求代理的身份认证408 Request Time-out - 服务器等待客户端发送的请求时间过长,超时409 Conflict - 服务器完成客户端的 PUT 请求时可能返回此代码,服务器处理请求时发生了冲突410 Gone - 客户端请求的资源已经不存在411 Length Required - 服务器无法处理客户端发送的不带Content-Length的请求信息412 Precondition Failed - 客户端请求信息的先决条件错误413 Request Entity Too Large - 由于请求的实体过大,服务器无法处理,因此拒绝请求,为防止客户端的连续请求,服务器可能会关闭连接414 Request-URL Too Large - 请求的URI过长(URI通常为网址),服务器无法处理415 Unsupported Media Type - 服务器无法处理请求附带的媒体格式416 Requested Range Not Satisfiable - 客户端请求的范围无效417 Expectation Failed - 服务器无法满足Expect的请求头信息5xx - 服务器错误500 Internal Server Error - 服务器内部错误,无法完成处理501 Not Implemented - 服务器不支持请求的功能,无法完成请求502 Bad Gateway - 作为网关或者代理工作的服务器尝试执行请求时,从远程服务器接受到了一个无效的响应503 Service Unavailable - 由于超载或系统维护,服务器暂时无法处理客户端的请求504 Gateway Time-out - 充当网关或代理的服务器,未能及时从远端服务器获取请求505 HTTP Version Not Supported - 服务器不支持请求的HTTP协议的版本,无法完成处理302	在响应头中加入Location参数浏览器接受到带有location头的响应时,就会跳转到相应的地址][减低服务器流量压力根据HTTP规范,GET用于信息获取,而且应该是安全的和幂等的,所谓安全的意味着该操作用于获取信息而非修改信息,GET请求一般不应产生副作用,幂等的意味着对同一URL的多个请求应该返回同样的结果,完整的定义并不像看起来那样严格,从根本上讲,其目标是当用户打开一个链接时,她可以确信从自身的角度来看没有改变资源原理区别一般在浏览器中输入网址访问资源都是通过GET方式,在FORM提交中,可以通过Method指定提交方式为GET或者POST,默认为GET提交http定义了与服务器交互的不同方法,最基本的方法有4种,分别是GET,POST,PUT,DELETEURL全称是资源描述符一个URL地址,它用于描述一个网络上的资源,而HTTP中的GET,POST,PUT,DELETE就对应着对这个资源的查,改,增,删4个操作GET一般用于获取/查询资源信息,而POST一般用于更新资源信息[个人认为这是GET和POST的本质区别,也是协议设计者的本意,其它区别都是具体表现形式的差异]根据HTTP规范,GET用于信息获取,而且应该是安全的和幂等的* 所谓安全的意味着该操作用于获取信息而非修改信息,换句话说,GET请求一般不应产生副作用,就是说,它仅仅是获取资源信息,就像数据库查询一样,不会修改,增加数据,不会影响资源的状态{这里安全的含义仅仅是指是非修改信息}* 幂等的意味着对同一URL的多个请求应该返回同样的结果[幂等(idempotent、idempotence)是一个数学或计算机学概念,常见于抽象代数中对于单目运算,如果一个运算对于在范围内的所有的一个数多次进行该运算所得的结果和进行一次该运算所得的结果是一样的,那么我们就称该运算是幂等的,如绝对值运算就是一个例子,在实数集中,有abs(a) = abs(abs(a))对于双目运算,则要求当参与运算的两个值是等值的情况下,如果满足运算结果与参与运算的两个值相等,则称该运算幂等,如求两个数的最大值的函数,有在实数集中幂等,即max(x,x) = x,看完上述解释后,应该可以理解GET幂等的含义了但在实际应用中,以上2条规定并没有这么严格根据HTTP规范,POST表示可能修改变服务器上的资源的请求]上面大概说了一下HTTP规范中,GET和POST的一些原理性的问题但在实际的做的时候,很多人却没有按照HTTP规范去做,导致这个问题的原因有很多* 很多人贪方便,更新资源时用了GET,因为用POST必须要到from(表单),这样会麻烦一点* 对资源的增,删,改,查操作,其实都可以通过GET/POST完成,不需要用到PUT和DELETE* 早期的但是Web MVC框架设计者们并没有有意识地将URL当作抽象的资源来看待和设计,还有一个较为严重的问题是传统的Web MVC框架基本上都只支持GET和POST两种HTTP方法,而不支持PUT和DELETE方法{MVC本来是存在于Desktop程序中的,M是指数据模型,V是指用户界面,C则是控制器,使用MVC的目的是将M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式}表达式区别//http请求行//http请求消息报头//回车换行[]//http请求正文提交方式区别1、GET提交的数据会在地址栏中显示出来,而POST提交,地址栏不会改变* GET提交请求的数据会附在URL之后(就是把数据放置在HTTP协议头中),以?分割URL和传输数据,多个参数用&连接* POST提交把提交的数据放置在是HTTP包的包体中2、HTTP协议没有对传输的数据大小进行限制,HTTP协议规范也没有对URL长度进行限制* GET特定浏览器和服务器对URL长度有限制,IE对URL长度的限制是2083字节(2K+35),对于其他浏览器,如Netscape、FireFox等,理论上没有长度限制,其限制取决于操作系统的支持* POST由于不是通过URL传值,理论上数据不受限,但实际各个WEB服务器会规定对post提交数据大小进行限制,Apache、IIS6都有各自的配置3、安全性POST的安全性要比GET的安全性高{这里所说的安全性和上面GET提到的安全不是同个概念,上面安全的含义仅仅是不作数据修改,而这里安全的含义是真正的Security的含义}4、Http get,post,soap协议都是在http上运行的* get请求参数是作为一个key/value对的序列(查询字符串)附加到URL上的查询字符串的长度受到web浏览器和web服务器的限制(IE最多支持2048个字符),不适合传输大型数据集同时,它很不安全* post请求参数是在http标题的一个不同部分(名为entitybody传输的),这一部分用来传输表单信息,因此必须将Content-type设置为application/x-www-form-urlencoded,post设计用来支持web窗体上的用户字段,其参数也是作为key/value对传输* soap是http post的一个专用版本,遵循一种特殊的xml消息格式Content-type设置为,text/xml任何数据都可以xml化* get是从服务器上获取数据,post是向服务器传送数据get和post只是一种传递数据的方式,get也可以把数据传到服务器,他们的本质都是发送请求和接收结果只是组织格式和数据量上面有差别,http协议里面有介绍2.get是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各个字段一一对应,在URL中可以看到post是通过HTTPpost机制,将表单内各个字段与其内容放置在HTML HEADER内一起传送到ACTION属性所指的URL地址用户看不到这个过程,因为get设计成传输小数据,而且最好是不修改服务器的数据,所以浏览器一般都在地址栏里面可以看到,但post一般都用来传递大数据,或比较隐私的数据,所以在地址栏看不到,能不能看到不是协议规定,是浏览器规定的* 对于get方式,服务器端用Request.QueryString获取变量的值,对于post方式,服务器端用Request.Form获取提交的数据* get传送的数据量较小,不能大于2KB,post传送的数据量较大,一般被默认为不受限制但理论上,IIS4中最大量为80KB,IIS5中为100KBpost基本没有限制,我想大家都上传过文件,都是用post方式的,只不过要修改form里面的那个type参数* get安全性非常低,post安全性较高如果没有加密,他们安全级别都是一样的,随便一个监听器都可以把所有的数据监听到]一个网站的应用只需要接受HTTP协议中的GET或POST请求,即可完成所有操作对于攻击者来说,仅通过JavaScript就可以让浏览器发起这两个请求所以XSS攻击后,攻击者除了可以实施Cookie劫持外,还能够通过模拟GET、POST请求操作用户的浏览器这在某些隔离环境中会非常有用,比如Cookie劫持失效时,或者目标用户的网络不能访问互联网等情况3.2.2.2XSS钓鱼将XSS与钓鱼结合的思路利用JavaScript在当前界面伪造一个登录框,当用户在登录框中输入用户名与密码后,其密码会发送到黑客的服务器上充分发挥想象力,可以使XSS攻击的威力更加巨大3.2.2.3识别用户浏览器在很多时候,攻击者为了获取更大的利益,往往需要准确地手机用户的个人信息但是浏览器的UserAgent是可以伪造的,所以通过JavaScript取出来的这个浏览器对象,信息并不一定准确由于浏览器之间的实现存在差异——不同的浏览器会各自实现一些独特的功能,而同一个浏览器的不同版本之间也可能会有细微的差别所以通过分辨这些浏览器之间的差异,就能准确地判断出浏览器的版本,而几乎不会报错,这种方法比读取UserAgent要准确得多http://www.thespanner.co.uk/2009/01/29/detecting-browsers-javascript-hacks/3.2.2.4识别用户安装的软件知道了用户使用的浏览器、操作系统后,进一步可以识别用户安装的软件在IE中,可以通过判断ActiveX控件的classid是否存在,来推测用户是否安装了该软件这种方法很早就被用于挂马攻击——黑客通过判断用户安装的软件,选择对应的浏览器漏洞,最终达到植入木马的目的浏览器的扩展与插件也能被XSS Payload扫描出来3.2.2.5CSS History Hack通过CSS,可以发现用户曾经访问过的网站这个技巧最早被Jeremiah Grossman发现,其原理是利用style的visited属性,如果用户曾经访问过某个链接,那么这个链接的颜色会变得与众不同3.2.2.6获取用户的真实IP地址通过XSS Payload还有办法获得一些客户端的本地IP地址很多时候,用户电脑使用了代理服务器,或者在局域网中隐藏在NAT后面,网站看到的客户端IP地址是内网的出口IP地址,而并非用户的真实IP地址JavaScript本身并没有提供获取本地IP地址的能力XSS攻击需要借助第三方软件来完成可以借助以上两点结合第三方软件使用,获得用户IP地址http://decloak.net/decloak.html3.2.3XSS攻击平台Attack APIhttp://code.google.com/p/attackapi/由安全研究者pdp所主导的一个项目,它总结了很多能够直接使用XSS Payload,归纳为API的方式e.g.获取客户端本地信息的API(3.2.2)BeEFhttp://www.bindshell.net/tools/beef/BeEF曾经是最好的XSS演示平台它演示的是一个完整的XSS攻击过程BeEF有一个控制后台,攻击者可以在后台控制前端的一切每一个被XSS攻击的用户都将出现在后台,后台控制者可以控制这些浏览器的行为,并可以通过XSS向这些用户发送命令XSS- Proxy是一个轻量级的XSS攻击平台,通过嵌套iframe的方式可以实时地远程控制被XSS攻击的浏览器这些XSS攻击平台有助于深入了解XSS的原理及危害3.2.4XSS Worm#一种蠕虫病毒3.2.4.1Samy Worm用户之间发生交互行为的页面如果存在存储型XSS,则会比较容易发起XSS Worm攻击http://namb.la/popular/tech.html3.2.4.2百度空间蠕虫http://security.ctocio.com.cn/securitycomment/57/7792057.shtml以上两个蠕虫并不是恶意的蠕虫,真正可怕的蠕虫是那些在无声无息地盗取用户的敏感信息的蠕虫,然而这些蠕虫并不会干扰用户的正常使用,非常隐蔽3.2.5调试JavaScript想写好XSS Payload,需要有很好的JavaScript功底,调试JavaScript也是必不可少的技能工具Firebug这是最常用的脚本调试工具,前端工程师于Web Hacking必备,被誉为 居家旅行的瑞士军刀Firebug非常强大,它有好几个面板,可以查看页面的DOM节点IE 8 Developer Tools在IE8中,为开发者内置了一个JavaScript Debugger,可以动态调试JavaScriptFiddler这是一个本地代理服务器,需要将浏览器设置为使用本地代理服务器上网才可使用它会监控所有浏览器请求,并有能力在浏览器请求中插入数据它支持脚本编程,一个强大的Fiddler脚本将非常有助于安全测试http://www.fidder2.com/fidder2/HttpWatch这是一个商业软件,它以插件的形式内嵌在浏览器中它并不能调试JavaScript,它仅仅是一个专业针对Web的Sniffer[工具只是辅助,并不起关键作用]3.2.6XSS构造技巧3.2.6.1利用字符编码百度收藏将%c1\组成新的Unicode字符这样%c1把转运符号 \ 隐藏起来了,从而绕过了系统的安全检查,实施了XSS攻击3.2.6.2绕过长度限制很多时候,产生XSS的地方会有变量的长度限制,这个限制可能是服务器端逻辑造成的攻击者可以利用事件(Event)来缩短所需要的字节数最好的办法是把XSS Payload写到别处,再通过简短的代码加载这段XSS Payload最常用的一个藏代码的地方,就是location.hash,而且根据HTTP协议,location.hash的内容不会在HTTP包中发送,所以服务器端的Web日志中并不会记录location.hash中的数据,从而也更好地隐藏了黑客真实点意图因为location.hash的第一个字符是#,所以必须去除第一个字符才可运行location.hash本身没有长度限制,但是浏览器的地址栏是有长度限制的,不过这个长度已经足够用来写很长的XSS Payload了如果地址栏了长度不够用,还可以再使用加载远程JS的方法,来写更多代码在某些环境下,可以通过注释符绕过长度限制3.2.6.3使用<base>标签<base>标签并不常用,它的作用是定义页面上的所有使用相对路径标签的hosting地址需要特别注意的是,在有技术的文档中,提到<base>标签只能用在<head>标签内,其实这是不对的,<base>标签可以出现在HTML脚本的任意位置并作用于位于标签之后的所有标签所有在设计XSS安全方案时,一定要过滤掉这个非常危险的标签3.2.6.4window.name的妙用window.name对象是一个很神奇的东西,对当前窗口的window.name对象赋值,没有特殊的字符限制,因为window对象是浏览器的窗体,而并非document对象,因此很多时候window对象不受同源策略的限制,攻击者利用这个对象,可以实现跨于、跨页面传递数据,在某些环境下,这种特性将变得非常有用使用window.name可以缩短XSS Payload的长度在同一窗口打开XSS的站点后,只需通过XSS执行相应的代码即可这个技巧为安全研究者loulou所发现《突破XSS字符数量限制执行任意JS代码》http://secinn.appspot.com/pstzine/read?issue=3&articleid=43.2.7Mission Impossible从XSS漏洞利用的角度看,存储型XSS对攻击者的用处比反射型XSS要大,因为存储型XSS在用户访问正常URL时会自动触发,而反射型XSS会修改一个正常的URL,一般要求攻击者将XSS URL发送给用户点击,无形中提高了攻击门槛有的XSS漏洞被认为只能攻击自己,称之为鸡肋漏洞3.2.7.1Apache Expect Header XSS这个漏洞最早公布于2006年,这个漏洞曾一度被认为是无法利用的所以厂商不认为这是个漏洞这个漏洞的影响范围是Apache Expect Header版本1.3.34、2.0.57、2.2.1及以下利用过程向服务器提交后返回注意到服务器在出错返回时,会把Expect头的内容未经任何处理便写入到页面中,因此Expect头中的代码就会被浏览器解析执行从攻击过程可以看出,需要在提交请求时向HTTP头中注入恶意数据,才能触发漏洞,但对于XSS攻击来说,JavaScript工作渲染后的浏览器环境中,无法控制用户浏览器发出的HTTP头,因此,这个漏洞曾一度被认为是鸡肋漏洞后来,安全研究者Amit Klein提出了使用Flash构造请求的方法,成功地利用这个漏洞,变废为宝在发送Flash中的HTTP请求时,可以自定义大多数的HTTP头3.2.7.2Anehta的回旋镖反射型XSS也有可能像存储型XSS一样利用将要利用的反射型XSS嵌入一个存储型XSS中这个攻击方法曾经在未知安全研究者实现的一个XSS攻击平台(Anehta)中使用过,他将其命名为回旋镖因为浏览器同源策略的原因,XSS也受到同源策略的限制发生在A域上的XSS很难影响B域的用户思路如果在B域上存在一个反射型XSS_B,在A域上存在一个存储型XSS_A,当用户访问A域上的XSS_A时,同时嵌入B域上的XSS_B,则可达到在A域的XSS攻击B域用户的目的3.2.8Flash XSSFlash中同样也有可能造成XSS攻击ActionScript是一种非常强大和灵活的脚本,甚至可以使用它发起网络连接,因此应该尽可能地禁止用户能够上传或加载中定义的Flash文件如果仅仅是视频文件,则要求转码为flv文件,flv文件是静态文件,不会产生安全隐患如果是带动态脚本的Flash,则可以通过Flash的配置参数进行限制限制Flash动态脚本的最重要的参数是allowScriptAccress,这个参数定义了Flash能否与HTML页面进行通信always - 对与HTML的通信也就是执行JavaScript不做任何限制sameDomain - 只允许来自于本域的Flash域HTML通信,这是默认值never - 绝对静止Flash域HTML的通信使用always是非常危险的,一般推荐使用never,如果值为sameDomain的话,{必须确保Flash文件不是用户上传的}除了allowScriptAccress外,allowNetworking也非常关键,这个参数能控制Flash与外部网络进行通信all - 允许使用所有的网络通信,这是默认值internal - Flash不能与浏览器通信,但可以调用其他APInone - 禁止任何的网络通信一般建议此值设置为none或internal,设置为all可能带来安全问题除了用户的Flash文件能够实施脚本攻击外,一些Flash也可能会产生XSS漏洞安全研究者Stefano Di Paola曾经写了一个叫SWFIntruder的工具来检测产生在Flash里的XSS漏洞,通过这个工具可以检测出很多注入Flash变量导致的XSS问题https://www.owasp.org/index.php/Category:SWFIntruderFlash XSS往往被开发者所忽视,注入Flash变量的XSS,因为其原因出现在编译后的Flash文件中,一般的扫描工具或者代码审计工具都难以检查,常常使其成为漏网之鱼OWASP为Flash安全研究设立了一个Wiki页面https://www.owasp.org/index.php/Category:OWASP_Flash_Security_Project3.2.9JavaScript开发框架一般来收成熟的JavaScript开发框架都会注意自身的安全问题,但代码是人写的,高手难免也会犯错,一些JavaScript开发框架也曾暴露过一些XSS漏洞DojoDojo是一个流行的JavaScript开发框架,它曾被发现有XSS漏洞在Dojo1.4.1中,存在两个DOM型XSSYUI翻翻YUI的bugtracker也可以看到类似Dojo的问题jQueryjQuery可能是目前最流行的JavaScript框架,它本身出现的XSS漏洞很少,但开发者该记住的是,JavaScript框架只是对JavaScript语言本身的封装,并不能解决代码逻辑上产生的问题,所以开发者的意识才是安全编码的关键所在「3.3XSS防御」3.3.1HttpOnlyHttpOnly是由微软最早提出的并在IE6中实现,至今已经逐渐成为一个标准,浏览器将禁止页面的JavaScript访问带有HttpOnly属性的Cookie以下浏览器开始支持HttpOnlyMicrosoft IE 6 SP1+Mozilla Firefox 2.0.0.5+Mozilla Firefox 3.0.0.6+Google ChromeApple Safari 4.0+Opera9.5+严格来说,HttpOnly并非为了对抗XSS,它是解决XSS后的Cookie劫持攻击原理*见3.2.1*如果Cookie设置了HttpOnly,则这种攻击会失败,因为JavaScript读取不到Cookie的值一个Cookie的使用过程如下1. 浏览器想服务器发起请求,这时候没有Cookie2. 服务器发挥时发送Set- Cookie头,向客户端浏览器写入Cookie3. 在该Cookie到期前,浏览器访问该域下的所有页面,都将发送该Cookie{服务器可能会设置多个Cookie(多个key-value对),而HttpOnly可以有选择性地加在任意一个Cookie值上}在某些时候,应用可能需要JavaScript访问某几项Cookie,这种Cookie可以不设置HttpOnly标记,而仅把HttpOnly标记给用于认证的Cookie添加HttpOnly的过程简单,效果明显,有如四两拔千斤,但部署时需要注意如果业务非常复杂,则需要在所有Set-Cookie的地方,给关键Cookie都加上HttpOnly,漏掉了一个地方,都可能是使得这个方案失效使用HttpOnly有助于缓解XSS攻击,但仍然需要其他能够解决XSS漏洞的方案3.3.2输入检查常见的Web漏洞如XSS、SQL Injection等,都要求攻击者构造一些特殊字符,这些特殊字符可能是正常用户不会用到的,所以输入检查就有存在的必要了输入检查在很多时候也被用于格式检查这些格式检查有一点像白名单,也可以让一些基于特殊字符的攻击失效输入检查的逻辑,必须放在服务器端代码中实现,如果只是在客户端使用JavaScript进行输入检查,是很容易被攻击者绕过的目前的Web开发的普遍做法,是同时在客户端使用JavaScript中和服务器端代码中实现相同的输入检查客户端JavaScript的输入检查可以阻挡大部分误操作的用户,从而节约服务器资源在XSS防御上,输入检查一般是检查用户输入的数据中是否包含一些特殊字符,如果发现存在特殊字符,则将这些字符过滤或编码特殊字符e.g.<>'"比较智能的输入检查可能匹配XSS的特征,如<script>、javascript这种输入检查的方式被称为XSS Filter,互联网上有很多开源的XSS Filter的实现XSS Filter在用户提交数据时获取变量,并进行XSS检查,但此时用户数据并没有结合渲染页面的HTML代码,因此XSS Filter对语境的理解并不完整如果是一个全局性的XSS Filter,则无法看到用户数据的输出语境,而只能看到用户提交了一个URL,就很可能会漏报大多数情况下,URL是一种合法的用户数据XSS Filter还有一个问题其对于<、>的处理可能会改变用户数据的语义对于XSS Filter来说,发现敏感字符<,如果其不够智能,粗暴地过滤或者替换了<,则可能会改变用户原本的意思输入数据还可能会被展示在多个地方,每个地方的语境可能各不相同,如果使用单一的替换操作,则可能出现问题e.g.用户昵称会在很多地方展示,每个界面的语境也可能各不相同如果在输入时做了统一的更改,那么输出时可能有如下的问题------------------ 我的偶像是\"hackjacking\"我的偶像是"hackjacking"------------------然而第一个结果显然是用户不希望看到的[我也不喜欢看到第一种]3.3.3输出检查3.3.3.1安全编码函数编码分为很多种,针对HTML代码的编码方式是HtmlEncodeHtmlEncode并非专用名词,它只是一种函数的实现,它的作用是将字符转换成HTML Entities,对应的标准是ISO-8859-1为了对抗XSS,在HtmlEncode中要求至少转换以下字符&		&amp<		&lt"		&quot'		&#x27 或 &apos(不推荐)/		&#x2F包含反斜线是因为它可能会闭合一些HTML entity在PHP中,有htmlentities()和htmlspecialchars()两个函数可以满足安全要求JavaScript的编码方式可以使用JavascriptEncodeJavascriptEncode于HtmlEncode的编码方式不同,它需要使用 \ 对特殊字符进行转义在对抗XSS时,还要求输出的变量必须在引号内部以避免造成安全问题要求使用JavascriptEncode的变量输出一定要在引号内没有习惯的话,只能用更加严格的JavascriptEncode函数来保证安全除了数字、字母的所以字符,都使用十六进制\xHH的方式进行编码在OWASP ESAPI中有一个安全的JavascriptEncode的实现,非常严格http://www.owasp.org/index.php/Category:OWASP_Enterprise_Security_API除了HtmlEncode、JavascriptEncode外,还有许多用于各种情况的编码函数,比如XMLEncode(实现与HtmlEncode相似)JSONEncode(于JavascriptEncode相似)等在Apache Common Lang的StringEscapeUtils里,提供了许多escape的函数可以在适当的情况下选用适当的函数,但编码后的数据长度可能会发生改变,从而影响某些功能在编码时需要注意这个细节,以免产生不必要的bug3.3.3.2只需要一种编码吗XSS攻击主要发生在MVC架构中的View层,大部分的XSS漏洞可以在模板系统中解决在python的开发架构Django自带的模板系统Django Templates中,可以使用escape进行HtmlEncode在正确的地方使用正确的编码方式对于浏览器来说,htmlparser会优先于JavaScript Parser执行,所以解析过程是被HtmlEncode的字符先被解码,然后执行JavaScript事件导致XSS攻击发生的原因是由于没有分清楚输出变量的语境,因此并非用了auto-escape就万事大吉了XSS的防御需要区分情况对待3.3.4正确地防御XSSXSS的本质还是一种HTML注入,用户的数据被当成了HTML代码的一部分执行,从而混淆了原本的语义,产生了新的语义如果网站使用了MVC架构,那么XSS就发生在View层——在应用拼接变量到HTML页面时产生,所以在用户提交数据处进行输入检查的方案,其实并不是在真正发生攻击的地方做防御想要根治XSS问题,可以列出所有XSS可能发生的场景,再一一解决可能存在以下场景* 在HTML标签中输出所有在标签中输出的变量,如果未作任何处理,都可能导致直接产生XSS防御方法:对变量使用HtmlEncode* 在HTML属性中输出与标签中输出的XSS相似防御方法:对变量使用HtmlEncode在OWASP EASAPI中推荐了一种更严格的HtmlEncode——除了字母、数字外,其他所有的特殊字符都被编码成HTMLEnities* 在<script>标签中输出首先应该确保输出的变量在引号中攻击者需要先闭合引号才能实施XSS攻击防御方法:使用JavascriptEncode* 在事件中输出与<script>输出类似防御方法:使用JavascriptEncode* 在CSS中输出防御方法:尽可能禁止用户可控制的变量在<style>标签、HTML标签的style属性以及CSS文件中输出如果一定有这样的需求,OWASP ESAPI中推荐了encodeForCSS()函数原理:类似ESAPI.encoder().encodeForJavaScript()函数,除了字母、数字外的所有字符都被编码成十六进制形式(\uHH)* 在地址中输出1.在URL的path(路径)或者search(参数)中输出URLEncode会将字符转换为%HH形式e.g.	空格			%20<			%3c防御方法:使用URLEncode即可2.整个URL能够被用户完全控制,这是URL的Protocal和Host部分是不能够使用URLEncode的,否则会改变URl的语义在Protocal与Host中,如果使用严格的URLEncode函数,则会吧 :// 、. 等都编码掉 除了javascript作为伪协议可以执行代码外,还有vbscript、dataURI等协议可能导致脚本执行dataURI这个伪协议是Mozilla所支持的,能够将一段代码写在URL里防御方法:如果变量是整个URL,则应该先检查是否以http开头(如果不是则自动添加)以保证不会出现伪协议类的XSS攻击再对变量进行URLEncode3.3.5处理富文本有些时候,网站需要允许用户提交一些自定义的HTML代码,称之为富文本在处理富文本时,还是要回到输入检查的思路上来输入检查的主要问题是在检查时还不知道变量的输出语境,但用户提交的富文本数据,其语义是完整的HTML代码,在输出时也不会\n				拼凑到某个标签的属性中,因此可以特殊情况特殊处理在*3.3.4*中,列出了所有在HTML中可能执行脚本的地方,而一个优秀的XSS Filter,也应该能够找出HTML代码中所有可能执行脚本的地方HTML是一种结构化的语言,比较好分析,通过htmlparser可以解析出HTML代码的标签、标签属性和事件在过滤富文本时,事件应该被严格禁止,因为富文本的展示需求里不应该包括事件这种动态效果,而一些危险的标签,如<iframe>、<scroipt>、<base>、<from>等,也是应该严格禁止的对象在标签的选择上,{应该使用白名单,避免使用黑名单}e.g.<a>、<img>、<div>等比较安全的标签在富文本过滤中,处理CSS也是一件麻烦的事情,如果允许用户自定义CSS、style,则也可能导致XSS攻击,因此尽可能禁止用户自定义CSS与style如果一定要允许用户自定义样式,则只能像过滤富文本一样过滤CSS有一些比较成熟的开源项目,实现了对富文本的XSS检查Anti-Samy是OWASP上的一个开源项目,也是目前最好的XSS Filter,最早的时候,它是基于Java的,现在已扩展到.NET等语言https://www.owasp.org/index.php/Category:OWASP_AntiSamy_Project在PHP中,可以使用另外一个广受好评的开源项目:HTMLPurifyhttp://htmlpurifier.org/3.3.6防御DOM Based XSS在button的onclock事件中,执行了定义的一个函数,将HTML代码写入DOM节点,最后导致XSS的发生事实上,DOM Based XSS是从JavaScript中输出数据到HTML页面里,而前面提到的方法都是针对从服务器应用直接输出到HTML页面的XSS漏洞,因此并不适用于DOM型XSS防御方法:从JavaScript输出到HTML页面,也相当于一次XSS输出到过程,需要分语境使用不同的编码函数以下几个地方是JavaScript输出到HTML页面的必经之路document.write()[页面载入过程中用实时脚本创建页面内容,以及用延时脚本创建本窗口或新窗口的内容,在document被加载完后调用docuemnt.write方法时将会自动去触发document.open()在载入页面后,浏览器输出流自动关闭,在此之后,任何一个对当前页面进行操作的document.write()方法将打开一个新的输出流,它将清除当前页面内容(包括源文档的任何变量或值)][document.open():打开一个新文档,即打开一个流,并擦除当前文档的内容]document.writeln()xxx.innerHTML = xxx.outerHTML = innerHTML.replace[innerHTML:获取或替换html中的内容]document.attachEvent()window.attachEvent()[通过window.attachEvent()监听小事件]document.location.replace()[replace():用一个新文档取代当前文档]document.location.assign()[assign():加载一个新的文档]……需要重点关注这几个地方的参数是否可以被用户控制除了服务器端直接输出变量到JavaScript外,还有几个地方可能会成为DOM型XSS的输入点,也需要重点关注页面中所有的inputs框window.location(href、hash等)[window.location :用于获得当前页面的地址 (URL),并把浏览器重定向到新的页面]window.name[window.name:当前window的名称]document.referrer[document.referrer:返回一个url,当前页面就是从这个 URI 所代表的页面跳转或打开的]document.cookielocalstorage[localstorage属性允许在浏览器中存储 key - value 对的数据]XMLHttpRsquest返回的数据[XMLHttpRsquest是一组API函数集,可被JavaScript、JScript、VBScript以及其它web浏览器内嵌的脚本语言调用,通过HTTP在浏览器和web服务器之间收发XML或其它数据]……安全研究者Stefano Di Paola设立了一个DOM型XSS的cheatsheethttp://code.google.com/p/domxsswiki3.3.7不同角度看XSS的风险一般来说,存储型XSS的风险会高于反射型XSS,因为存储型XSS会保存在服务器上,有可能跨网站存在它不改变url的原有结构,因此有时候还能逃过一些IDS的检测从攻击过程来说,反射型XSS一般要求攻击者诱使用户点击一个包含XSS代码的URL链接,而存储型XSS只需要让用户浏览一个正常的URL链接从风险的角度来看,用户之间有互动的页面,是可能发起XSS Worm攻击的地方,而根据不同页面的PageView高低,也可以分析出哪些页面受XSS攻击后影响会更大「3.4总结」理论上,XSS漏洞虽然复杂,但却是可以彻底解决的,在设计XSS解决方案时,应该深入理解XSS攻击的原理,针对不同的场景使用不同的方法,同时有很多开源项目为我们提供了参考[过滤输入的数据,包括'、"、<、>等特殊字符对输出到页面的数据进行相应的编码转换,包括HTMl实体编码、JavaScript编码等]

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

相关文章

  1. Linux个人常用命令整理

    Linux个人常用命令整理Linux基础命令ls命令&#xff1a;Linux基础命令 ls命令&#xff1a; which hostname #查询命令对应的程序 which hostname /usr/bin/hostnamecat -n /etc/shells #显示行号 [rootpxc73 ~]# cat -n /etc/passwd1 root:x:0:0:root:/root:/bin/bash2 b…...

    2024/5/7 0:28:59
  2. 香蕉派 BPI-D2 AI智能相机采用瑞芯微 RV1126/RV1109芯片设计

    Banana Pi BPI-D2基于瑞芯微Rockchip RV1109和RV1126的AI 智能摄像头芯片设计。采用人工智能视觉应用的高性能机器视觉处理器 SoC主控。它基于四核ARM Cortex-A7 32 位内核&#xff0c;集成了NEON 和FPU。每个核心都有一个32KB I-cashe 和32KB D-cache 以及 512KB 共用二级…...

    2024/4/14 9:21:14
  3. Spring面试常问

    什么是spring? 及有什么特点 Spring是一个轻量级Java开发框架,一站式轻量级应用开发平台.Spring最根本的使命是解决企业级应用开发的复杂性&#xff0c;即简化Java开发。两大核心特性&#xff1a;IOC容器(控制反转)和AOP&#xff08;面向切面编程&#xff09;模块。通过IOC容…...

    2024/4/15 13:24:39
  4. VS2019生成库时报错:targets(423,5): error MSB6011: 传递给 Microsoft.Build.CPPTasks.CL 任务的参数无效

    C/C -》语言-》 C语言标准 ISO C17标准&#xff08;/std:c17&#xff09;...

    2024/4/14 9:21:34
  5. 动态添加class属性,给其增加css样式

    <div class"cag-dialogBox" :class"{active: item choosenItem}" click"clickAffirm(item)" v-for"item of dataList" :key"item.agentId">active为class名&#xff0c;&#xff0c;冒号后面为判断条件。 .active {…...

    2024/4/17 10:57:05
  6. [识原理图]1.22 JTAG、存储及CPU资源(存储器,总线 后续)

    电容是给仿真接口用的 连接器DIP4&#xff0c;用杜邦线连接 FLASH&#xff1a;闪存 小容量用NOR FLASH 中容量用NAND FLASH 大容量用EMMC EMMC(4G-8G)&#xff1a;接口通用&#xff0c;管理系统 存储器&#xff0c;总线 后续...

    2024/4/7 15:42:45
  7. vector扩容机制

    一、扩容原理 Vector通过一个连续的数组存放元素&#xff0c;如果集合已满&#xff0c;在新增数据的时候&#xff0c;就要分配一块更大的内存&#xff0c;将原来的数据复制过来&#xff0c;释放之前的内存&#xff0c;在插入新增的元素。 二、扩容倍数 1.5倍或2倍&#xff0…...

    2024/4/14 9:21:34
  8. 基于wine葡萄酒数据集的分类方法研究

    目录 一、问题阐述 1.1、数据集信息 1.2、可解决的问题 二、设计目的 三、实验需要的平台 四、基本原理分析 4.1、逻辑回归算法基本原理 4.2、支持向量机算法的基本原理 五、实验过程阐述及实验结论 5.1、实现逻辑回归算法过程及结论 5.2、实现支持向量机算法过程及…...

    2024/4/14 9:21:49
  9. 常用SQL命令汇总--多表查询

    一、多表查询 1.连接查询&#xff1a; 连接查询是将两个或两个以上的表按照某个条件连接起来&#xff0c;从中选取需要的数据&#xff1b; t_book表&#xff1a; t_bookType表&#xff1a; 如&#xff1a; SELECT * from t_book,t_booktype;返回结果将两个表的所有组合结…...

    2024/4/14 9:21:39
  10. Gateway 网关 (三) Sentinel 限流

    废话 其实大部分人都是苦于不知道用啥工具去做限流&#xff0c;如果自己写一个限流逻辑&#xff0c;似乎又比较low&#xff0c;所以&#xff0c;当看到我这个标题的时候&#xff0c;其实本章大概率是不需要再去看了。 建议直接看官方文档吧&#xff0c;写得挺清楚的&#xff…...

    2024/4/27 3:19:16
  11. Could not find a version that satisfies the requirement virtualenv (from versions: )No matching dis

    使用pip运行pip install -U virtualenv命令时报错。问题解决方法就是找淘宝的镜像源去配置&#xff0c;镜像源配置在%C:用户/用户名/pip/pip.ini%,方法可以百度&#xff0c;这里给你我测试过的 [global] #index-url https://pypi.mirrors.ustc.edu.cn/simple #index-url htt…...

    2024/5/6 15:26:54
  12. 学习AJAX必知必会(3)~自动重启工具nodemon、缓存问题、请求超时和网络异常、取消重复请求

    Python微信订餐小程序课程视频 https://edu.csdn.net/course/detail/36074 Python实战量化交易理财系统 https://edu.csdn.net/course/detail/35475 1、nodemon 自动重启工具&#xff08;自动重启基于nodejs开发的服务端应用&#xff09; ■ nodemon 是一个工具&#xff0…...

    2024/4/14 9:21:24
  13. 10年Android经验老程序员浅谈职业发展:非科班出身程序员如何弥补技术差距进入好公司?

    在校大学生需要早早对自己的未来作出规划&#xff0c;如果不把每个时间节点进行精确计算和把控&#xff0c;一不留神就错失了进大厂的机会。 只要勤奋了&#xff0c;任何时间点都不算晚&#xff1a;论时间的安排 在龟兔赛跑里&#xff0c;最让人痛心的不是兔子在中途睡觉&…...

    2024/4/14 9:21:14
  14. 8-Arm-PEG2000-Hydroxyl,八臂聚乙二醇羟基,8-Arm-PEG2000-OH

    8臂PEG-OH是一种多臂聚乙二醇&#xff0c;八臂的每个末端都有羟基。六甘油核心用于8臂聚乙二醇的原料和衍生物。多臂PEG的指示分子量是所有臂的分子量之和。 英文名称&#xff1a;8-Arm PEG-OH 中文名称&#xff1a;八臂-聚乙二醇-羟基 分子量&#xff1a;1k&#xff0c;2k&am…...

    2024/5/7 2:42:31
  15. FICO-资产卡片创建

    1、打开客户端登录SAP系统&#xff0c;在标准工具栏命令行内输入事务代码AS01 2、在一般的页签&#xff1a;输入描述&#xff08;资产名称&#xff09;&#xff0c;资产主号文本&#xff08;资产名称&#xff09;&#xff0c;序列号&#xff1a;资产规格型号&#xff0c;存货号…...

    2024/4/14 9:21:24
  16. 华为NE40E路由器实验配置示例 | 配置L3VdPdNd over OSPF SR-MPLS BE

    组网需求 如图1所示: CE1、CE2属于vpna。 vpna使用的VPN-target属性为111:1。 配置L3VPN迭代OSPF SR-MPLS BE隧道&#xff0c;保证相同VPN用户之间的安全互访。同时由于公网PE之间存在多条链路&#xff0c;要求数据流量在公网能够进行负载分担。 图1 L3VPN迭代OSPF SR-MPLS…...

    2024/4/14 9:22:30
  17. Ubuntu护眼软件F.lux

    https://github.com/xflux-gui/fluxgui 参考&#xff1a;四个 Linux 下的“护眼”软件 - 简书...

    2024/4/19 21:11:41
  18. 备份代码,ignore 一些不要的文件夹,比如build

    备份代码&#xff0c;ignore 一些不要的文件夹&#xff0c;比如build 代码在这 https://gitee.com/starplatinum111/my_util_py_pub/blob/master/myfile.py 配置 代码的根目录 proj_path r"D:\project\waibao\what-rubbish-final" 要放到的根目录&#xff0c;没有此…...

    2024/4/14 9:22:25
  19. idea 几个快捷操作

    public class DemowuApplication {//这些也是从网上看的&#xff0c;做个记录public static void main(String[] args) {System.out.println("this is test maven");boolean flag false;//自动 ifif (flag) { //flag.if}if (!flag) { //flag.e}//自动for循环for (in…...

    2024/4/18 1:22:06
  20. 香蕉派 BPI-R3 开源路由器开发板采用 联发科MT7986(Filogic 830)芯片设计,支持Wi-Fi 6/6E,2.5GbE SFP光电口

    香蕉派BPI-R3开源路由器开发板采用联发科MT7986 (Filogic 830)四核 ARMA53 MT7531A芯片设计,板载2G DDR内存与8G eMMC存储,这是一个非常高性能开源路由器开发板,支持WIFI 6/6E, 2.4G Wifi无线使用MT7975N芯片, 5G Wifi使用MT7975P芯片,支持2 SFP光通信接口 ,5个千兆网口。 应用…...

    2024/4/16 13:55:22

最新文章

  1. PCB机打孔机程序(三)

    ///<-检测STOP/ OUT41; delay(80); //延时 OUT10; //开检测光标下总线 if(!IN5) //光标下检测 …...

    2024/5/7 9:00:03
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言&#xff0c;在此感激不尽。 权重和梯度的更新公式如下&#xff1a; w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/5/6 9:38:23
  3. 对接阿里云实时语音转文字的思路

    将上述概念转化为详细代码需要一定的步骤。这里&#xff0c;我们将根据之前讨论的服务划分&#xff0c;创建一个简化的框架来模拟这个流程。注意&#xff0c;由于空间限制和简化目的&#xff0c;某些实现细节会被省略或简化&#xff0c;你可能需要根据实际情况进行调整。 1. 配…...

    2024/5/3 10:23:52
  4. 与机器对话:ChatGPT 和 AI 语言模型的奇妙故事

    原文&#xff1a;Talking to Machines: The Fascinating Story of ChatGPT and AI Language Models 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 从 ELIZA 到 ChatGPT&#xff1a;会话式人工智能的简史 会话式人工智能是人工智能&#xff08;AI&#xff09;的一个分…...

    2024/5/5 8:50:13
  5. 02 OSI和TCP/IP参考模型

    OSI参考模型优点&#xff1a; 1. 分层结构&#xff1a;OSI参考模型将网络通信划分为七个不同的层次&#xff0c;每个层次都有特定的功能和责任。这样的分层结构使得网络通信变得模块化&#xff0c;易于理解、设计和维护。 2. 标准化&#xff1a;OSI参考模型的制定依据了通信领…...

    2024/5/6 6:45:00
  6. 【外汇早评】美通胀数据走低,美元调整

    原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...

    2024/5/7 5:50:09
  7. 【原油贵金属周评】原油多头拥挤,价格调整

    原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...

    2024/5/4 23:54:56
  8. 【外汇周评】靓丽非农不及疲软通胀影响

    原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...

    2024/5/4 23:54:56
  9. 【原油贵金属早评】库存继续增加,油价收跌

    原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...

    2024/5/6 9:21:00
  10. 【外汇早评】日本央行会议纪要不改日元强势

    原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...

    2024/5/4 23:54:56
  11. 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响

    原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...

    2024/5/4 23:55:05
  12. 【外汇早评】美欲与伊朗重谈协议

    原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...

    2024/5/4 23:54:56
  13. 【原油贵金属早评】波动率飙升,市场情绪动荡

    原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...

    2024/5/4 23:55:16
  14. 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试

    原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...

    2024/5/4 23:54:56
  15. 【原油贵金属早评】市场情绪继续恶化,黄金上破

    原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...

    2024/5/6 1:40:42
  16. 【外汇早评】美伊僵持,风险情绪继续升温

    原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...

    2024/5/4 23:54:56
  17. 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势

    原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...

    2024/5/4 23:55:17
  18. 氧生福地 玩美北湖(上)——为时光守候两千年

    原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...

    2024/5/4 23:55:06
  19. 氧生福地 玩美北湖(中)——永春梯田里的美与鲜

    原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...

    2024/5/4 23:54:56
  20. 氧生福地 玩美北湖(下)——奔跑吧骚年!

    原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...

    2024/5/4 23:55:06
  21. 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!

    原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...

    2024/5/5 8:13:33
  22. 「发现」铁皮石斛仙草之神奇功效用于医用面膜

    原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...

    2024/5/4 23:55:16
  23. 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者

    原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...

    2024/5/4 23:54:58
  24. 广州械字号面膜生产厂家OEM/ODM4项须知!

    原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...

    2024/5/6 21:42:42
  25. 械字号医用眼膜缓解用眼过度到底有无作用?

    原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...

    2024/5/4 23:54:56
  26. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下&#xff1a;1、长按电脑电源键直至关机&#xff0c;然后再按一次电源健重启电脑&#xff0c;按F8健进入安全模式2、安全模式下进入Windows系统桌面后&#xff0c;按住“winR”打开运行窗口&#xff0c;输入“services.msc”打开服务设置3、在服务界面&#xff0c;选中…...

    2022/11/19 21:17:18
  27. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像&#xff08;每一幅图像的大小是564*564&#xff09; f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  28. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面&#xff0c;在等待界面中我们需要等待操作结束才能关机&#xff0c;虽然这比较麻烦&#xff0c;但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  29. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows&#xff0c;请勿关闭计算机”的提示&#xff0c;要过很久才能进入系统&#xff0c;有的用户甚至几个小时也无法进入&#xff0c;下面就教大家这个问题的解决方法。第一种方法&#xff1a;我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  30. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题&#xff0c;电脑时发现开机屏幕显现“正在配置Windows Update&#xff0c;请勿关机”(如下图所示)&#xff0c;而且还需求等大约5分钟才干进入系统。这是怎样回事呢&#xff1f;一切都是正常操作的&#xff0c;为什么开时机呈现“正…...

    2022/11/19 21:17:13
  31. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示&#xff0c;没过几秒后电脑自动重启&#xff0c;每次开机都这样无法进入系统&#xff0c;此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一&#xff1a;开机按下F8&#xff0c;在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  32. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况&#xff0c;就是电脑提示正在准备windows请勿关闭计算机&#xff0c;碰到这样的问题该怎么解决呢&#xff0c;现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法&#xff1a;1、2、依次…...

    2022/11/19 21:17:11
  33. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后&#xff0c;每次关机的时候桌面上都会显示一个“配置Windows Update的界面&#xff0c;提示请勿关闭计算机”&#xff0c;每次停留好几分钟才能正常关机&#xff0c;导致什么情况引起的呢&#xff1f;出现配置Windows Update…...

    2022/11/19 21:17:10
  34. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着&#xff0c;别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚&#xff0c;只能是考虑备份数据后重装系统了。解决来方案一&#xff1a;管理员运行cmd&#xff1a;net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  35. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题&#xff1a;电脑提示“配置Windows Update请勿关闭计算机”怎么办&#xff1f;win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢&#xff1f;一般的方…...

    2022/11/19 21:17:08
  36. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 &#xff0c;然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  37. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  38. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了&#xff0c;具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面&#xff0c;长时间没反应&#xff0c;无法进入系统。这个问题原来帮其他同学也解决过&#xff0c;网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  39. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法&#xff0c;并在最后教给你1种保护系统安全的好方法&#xff0c;一起来看看&#xff01;电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中&#xff0c;添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  40. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候&#xff0c;开启电脑发现电脑显示&#xff1a;配置windows更新失败&#xff0c;正在还原更改&#xff0c;请勿关闭计算机。。.这要怎么办呢&#xff1f;下面小编就带着大家一起看看吧&#xff01;如果能够正常进入系统&#xff0c;建议您暂时移…...

    2022/11/19 21:17:02
  41. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机&#xff0c;电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  42. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题&#xff0c;就是我们的win7系统在关机的时候&#xff0c;总是喜欢显示“准备配置windows&#xff0c;请勿关机”这样的一个页面&#xff0c;没有什么大碍&#xff0c;但是如果一直等着的话就要两个小时甚至更久都关不了机&#xff0c;非常…...

    2022/11/19 21:17:00
  43. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时&#xff0c;一般是您正对windows进行升级&#xff0c;但是这个要是长时间没有反应&#xff0c;我们不能再傻等下去了。可能是电脑出了别的问题了&#xff0c;来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  44. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况&#xff0c;当我们打开电脑之后&#xff0c;发现一直停留在一个界面&#xff1a;“配置Windows Update失败&#xff0c;还原更改请勿关闭计算机”&#xff0c;等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  45. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57