惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

WordPress大学
WordPress大学
Engineering at Meta
Engineering at Meta
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Martin Fowler
Martin Fowler
雷峰网
雷峰网
Recent Announcements
Recent Announcements
博客园 - 叶小钗
F
Full Disclosure
C
Check Point Blog
A
About on SuperTechFans
L
LangChain Blog
Vercel News
Vercel News
T
The Blog of Author Tim Ferriss
博客园 - 司徒正美
C
Cybersecurity and Infrastructure Security Agency CISA
C
CXSECURITY Database RSS Feed - CXSecurity.com
Cisco Talos Blog
Cisco Talos Blog
Hugging Face - Blog
Hugging Face - Blog
Recorded Future
Recorded Future
MongoDB | Blog
MongoDB | Blog
Project Zero
Project Zero
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
D
Darknet – Hacking Tools, Hacker News & Cyber Security
Know Your Adversary
Know Your Adversary
D
Docker
U
Unit 42
酷 壳 – CoolShell
酷 壳 – CoolShell
T
The Exploit Database - CXSecurity.com
L
Lohrmann on Cybersecurity
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Latest news
Latest news
V
Visual Studio Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
L
LINUX DO - 最新话题
Google DeepMind News
Google DeepMind News
小众软件
小众软件
NISL@THU
NISL@THU
GbyAI
GbyAI
H
Heimdal Security Blog
Jina AI
Jina AI
I
InfoQ
PCI Perspectives
PCI Perspectives
P
Privacy International News Feed
P
Proofpoint News Feed
N
News and Events Feed by Topic
C
CERT Recently Published Vulnerability Notes
aimingoo的专栏
aimingoo的专栏
SecWiki News
SecWiki News
B
Blog RSS Feed
阮一峰的网络日志
阮一峰的网络日志

博客园 - music000

分享:使用JQuery进行跨域请求 Flash Chart OSI七层网络模型与TCP/IP四层网络模型 一些数据库理论知识 Sqlserver中Compute By子句用法分析 数据查询的另类需求 A Preview of HTML 5 CSS Sprites 15 Rules for Faster-Loading Web Sites 关于"多级目录(分类)"的一些想法 ----- 实现方法 金额转换:阿拉伯数字转中文(SQL存储过程) 金额转换:阿拉伯数字转中文(javascript) 这两天不爽——公车上被误认为色狼、游泳撞破上嘴唇 如何获取字段中分隔符的个数?(sql语句) 关于GridView导出Excel的一些问题(采用Ajax出现的的问题及解决方法) - music000 - 博客园 固定表头 Bubble in JavaScript DOM Reg-日期 安装 WebDesigner 之后,ASPNET 帐户没有对 IIS 的访问权。
谨防 url 传递参数未编码(转码)产生的陷阱
music000 · 2009-03-03 · via 博客园 - music000

      在最近的项目中,碰到些因为 url 传递参数时未编码(转码)所引起的一些“莫名其妙”的错误,特此记下来,以免大家再像我一样走弯路。 

      我们知道,web项目总少不了参数传递的情况,如 http://www.google.cn/search?hl=zh-CN&q=%E5%95%8A,这就带了hl 与 q 两个参数,并且 q 是经过编码的(中文为 “啊”)。但在项目中,我们有时候传递参数却会忘记对参数进行编码(解码、转码),这样,会产生什么样的陷阱呢?

      1、公司原有的OA(asp开发,文件编码:gb2312)与刚开发的内部业务系统(asp.net开发,文件编码:uft-8)进行集成,登陆OA,将用户名写入cookie(cookies["user_name"]),然后在业务系统中读取此 cookie,死活都读取不到,为什么?文件编码不同,导致业务系统里面cookie的名称已经变成了 “user%5Fname”!

      2、业务系统(文件编码:uft-8)内部调用外部的一个php文件(编码:gb2312)发送短信:http://sms.XXX.cn/index.php?controller=BoSends&action=sendSms&username=某公司&password=password&mobile=139********&content=Hello,也是一样发送不成功!看看php文件的编码,才知道是 gb2312,当username 和 password 传递过去的时候,系统里面找不到相关资料,因为username("某公司")已经发生改变了!

      在这两种情况下,我们就必须对文件进行转码了:如2、HttpUtility.UrlEncode("某公司",System.Text.Encoding.GetEncoding("gb2312")),当然我们可以写一个方法:

      

Code

      再有就是在系统内部页面传递参数进行编码:

      3、老板很气愤:XXX,你过来,这个统计系统是你做的吗?
                           我:是的!有什么问题吗?
                       老板:怎么回事?这个链接明明有统计数据的,怎么查询它的详细数据就没有呢?连统计图也看不见!
                           我:我看下...
      
      经检查发现:老板是正确的,那个链接确实有统计数据,但点击查看这个链接的详细数据却没有了! ???

      回到办公桌前,赶紧再试那个链接 http://www.XXX.com/admins/DayChart.aspx?un=ABC&ul=http://p.yiqifa.com/servlet/handleClick?sid=a7e226f4bb8f1a18&pid=221&wid=232

      这个链接需要传递两个参数:un 与 ul,其中,un=ABC ,ul=http://p.yiqifa.com/servlet/handleClick?sid=a7e226f4bb8f1a18

,但在参数传递之后,ul 变成了什么?也许你已经发现了:ul=http://p.yiqifa.com/servlet/handleClick?sid=a7e226f4bb8f1a18&pid=221&wid=232。是的,ul 已经变成了 http://p.yiqifa.com/servlet/handleClick?sid=a7e226f4bb8f1a18 ,pid 与 wid 被当成了 DayChart.aspx 的参数了!

      4、统计某页面所有的链接及图片点击,1分钟内重复点击不入库,采用cookie保存用户点击数据,静态页面采用脚本异步向服务器传递数据。在本机运行应用程序实现需求,但在服务器上就出现问题了:点击 N 多不同的链接,只会录入前两条数据!

      难道是域名的问题?服务器的应用程序使用了域名,而本机还是localhost。于是修改了host文件,给本机模拟域名,问题重现了,本机和服务器出现的问题一模一样,只插入两条数据!

      看看代码,考虑到对cookie的操作较特殊,于是每次点击将 Cookie 写入文本文件,再进行检查,检查发现:写入的cookie值与预期的不一样...

      cookie需要写入客户端的,有可能是文件的编码产生的问题吗?嗯!于是在写入cookie之前,对字符串进行编码,获取cookie之后,再对 cookie 内的字符串进行解码。问题解决了,服务器上可以正常插入数据了...

      但为什么采用域名会出现那样的错误呢???(期待...)

      3、4采用的编码、解码:HttpUtility.UrlEncode(str) 、HttpUtility.UrlDecode(str)

      另外附下:js脚本提交页面时,注意中文参数的传递 (escape(str))
      SomeOne:啊???这个也附上来...  地球人都知道啊!        
      我: 哈哈...啰嗦下! 

      以上只是项目中遇到的编码问题,记录下来,希望对大家有所帮助,同时,不正确的地方希望大家告知,谢谢!