i春秋url地址编码问题

i春秋学院是国内比较知名的安全培训平台,前段时间看了下网站,顺便手工简单测试常见的XSS,发现网站搜索功能比较有意思。

其实是对用户输入的内容HTML编码和URL编码的处理方式在这里不合理,提交到乌云被拒绝了,因为确实没啥危害,因此技术BLOG记录下。

如搜索:http://www.ichunqiu.com/search/ab<>,搜索内容为ab<>,页面会把<>做html编码后在页面展现,这样看起一切正常。

如:

但经过多次分析,发现把搜索的内容用URL多次编码或html多次编码后,服务端后台都会自动解码然后输出到客户端,那是否可以把恶意的标签通过多次编码后来搜索,伪造一个URL地址,达到XSS的攻击效果呢。

结果经过多次测试,发现虽然多次URL和HTML编码后,后台会自动解码,但输出到客户端前,会再次对输出的内容做安全性检测,导致不能XSS。

比如输入:%25253Cimg%20src%253D"http%3A%2F%2Fwww.baidu.com%2Flogin%2Flogout"%25253E

该内容是标签:<img src="http://www.baidu.com/login/logout">,经过URL多次编码的效果,实际把英文字母用HTML多次编码一样可以,之前测试的时候用iframe,javascript等,都经过html多次编码字母内容也可以绕过,但输出到客户端时服务端又做了处理,所以导致不能XSS。

效果如下:

要是把img里的内容换成<img src="http://www.ichunqiu.com/login/logout">,则访问这个的地址会自动退出该网站。

最终没有对用户和网站造成任何安全影响,但觉得html这样处理的方式适合多文本框输入输出的处理方式,不适合对搜索内容的编码处理方式。

时间: 2024-08-03 10:46:53

i春秋url地址编码问题的相关文章

URL地址编码和解码

0. 参考 [整理]关于http(GET或POST)请求中的url地址的编码(encode)和解码(decode) python3中的urlopen对于中文url是如何处理的? 中文URL的编码问题 1. rfc1738 2.1. The main parts of URLs A full BNF description of the URL syntax is given in Section 5. In general, URLs are written as follows: <schem

[LeetCode] Encode and Decode TinyURL 编码和解码小URL地址

Note: This is a companion problem to the System Design problem: Design TinyURL. TinyURL is a URL shortening service where you enter a URL such as https://leetcode.com/problems/design-tinyurl and it returns a short URL such as http://tinyurl.com/4e9iA

URL地址的编码和解码问题

编码:encodeURIComponent() 方法:把URI字符串采用 UTF-8编码格式转化成escape格式的字符串.与encodeURI()相比,这个方法将对更多的字符进行编码,比如 / 等字符.所以如果字符串里面包含了URI的几个部分的话,不能用这个方法来进行编码,否则 / 字符被编码之后URL将显示错误.不会被此方法编码的字符:! * ( ) 解码:HttpUtility.UrlDecode() 这种方法主要是用来解决 url地址中的参数带有特殊字符或所传参数需要保密等

关于网络 URL 地址的编码

python 中 urllib 模块下的 urlencode 方法是专门用来生成合法的网络 url 的工具: 先看一个 urlencode 的编码示例: urlencode 编码示例 上述代码示例运行的结果如下: ![](null http://i2.51cto.com/images/blog/201801/29/63834b3dfcf75fb6655bf0af1054b6fe.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a

用jq编码解码一个url地址

介绍一下编码解码函数对 1.    escape /unescape   主要用于汉字编码,返回字符的unicode编码值, 对“+”不能编码 2.     encodeURI / decodeURI  用于对url进行编码,但对特殊字符如+ ? # @ & 等不能编码 3,      encodeURIComponent /decodeURIComponent    用于对url进行编码,可以对特殊字符进行编码 原文地址:https://www.cnblogs.com/techliang666

[转]PHP base64_encode 在URL地址参数编码上使用

因为我使用公钥,使用php的 openssl 加密之后的资料 base64_encode()字符串,然后放入请求 url 中当作参数,urlencode(base64_encode()),然后用 urldecode() 传过来的参数,出现+和 =丢失的情况,导致 openssl 解密base64_decode()的字符串失败. 我们知道Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,看好是编码,并不是加密. 编码过程不解释了,Base64要求把每三个8Bit的字节转换为四个6

转:Web页面通过URL地址传递参数常见问题及检测方法

Web页面即我们在浏览器中所看到的网页,在Web应用程序中,其页面往往需要进行动态切换和数据交互,页面间的数据常规传递方法有多种,本文主要介绍Web页面处理程序中常见的URL地址参数传递方法,包括概述其实现原理.特点和常见问题,最后介绍检测该方式常见应用问题的测试思路和方法. 1.web页面的概念 Web是internet上一个非常重要的资源信息网,产生于20世纪90年代初,它遵循超文本传输协议,以超文本或超媒介的形式传送各种各样的信息,为用户提供了一个具有友好的图形化界面--Web页面,以便用

URL地址中中文乱码详解(javascript中encodeURI和decodeURI方法、java.net.URLDecoder.encode、java.net.URLDecoder.decode)

引言: 在Restful类的服务设计中,经常会碰到需要在URL地址中使用中文作为的参数的情况,这种情况下,一般都需要正确的设置和编码中文字符信息.乱码问题就此产生了,该如何解决呢?且听本文详细道来. 1.  问题的引出 在Restful的服务设计中,查询某些信息的时候,一般的URL地址设计为: get /basic/service? keyword=历史 , 之类的URL地址. 但是,在实际的开发和使用中,确是有乱码情况的发生,在后台的读取keyword信息为乱码,无法正确读取. 2. 乱码是如

JavaScript对浏览器的URL进行编码、解码

关于url编码,js有三个函数.有三个解码方法,escape,encodeURI,encodeURIComponent().有三个解码方法,unescapse,decodeURI,decodeURIComponent. 1.escape()不能直接用于URL编码,它的真正作用是返回一个字符的Unicode编码值.比如"春节"的返回结果是%u6625%u8282,,escape()不对"+"编码主要用于汉字编码,现在已经不提倡使用.对应的解码函数是:unescapse