免费教程_免费网赚教程_破解版软件-寂涯网络学习基地

当前位置: 主页 > 系统综合 > 各类编程 > 如何使用Google Url安全解析URL

如何使用Google Url安全解析URL

时间:2011-12-12 16:13来源:未知 整理:寂涯网络 点击:

最近在研究 Chrome 代码的时候,发现了一个很实用的小工具,就是 GoogleUrl。
它可以很方便的解析和管理URL信息,比如像得到URL 中的路径、主机地址之类的,大大的
简化了开发网络应用程序的步骤。
  相信大家在处理URL中可能都会为如何使解析的过程安全,不产生溢出等问题而想过自
己的一点方法吧。
  像如下的代码可能就会带来一些安全问题:

void testURL(const char* lpszUrl)
{
  char szDomain[256];
  char szUrlPath[256];
  szDomain[0] = 0;
 szUrlPath[0] = 0;
  const char *szStart = NULL;
  const char *szPathStart = NULL;
  if (strnicmp(lpszUrl, "http://", 7) == 0)
 {
   //http开头
   szStart = lpszUrl + 7;
 } else if (strnicmp(lpszUrl, "https://", 8) == 0) {
   //https开头
   szStart = lpszUrl + 8;
 } else {
   szStart = lpszUrl;
 }
  szPathStart = strstr(szStart, "/");
  if (szPathStart)
 {
   strcpy(szUrlPath, szPathStart); 

 }
  strncpy(szDomain, szStart, szPathStart - szStart);
 szDomain[szPathStart - szStart] = 0;
 printf("Domain: %s\nPath: %s\n", szDomain, szUrlPath);

  如果是一般的URL 解析起来是没有什么问题的,因为毕竟超过256 字节的域名和路径都
很少见,至少笔者还没有见到过。
但如果我们特殊构造一下我们的URL,那么就可能会给程序带来安全问题,特别是浏览
器一类需要URL的软件,如以下的URL 就会给使用以上类似代码的程序带来致命错误:  
http://www.ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGH
IJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDE
FGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZAB
CDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXY
Z.com/index.html?ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEF
GHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABC
DEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ
ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVW
XYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRST
UVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQ
RSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMN
OPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ 

  原因就是地址的长度已经超出了缓冲区的长度,这是一个初学者经常会犯的一个错误,
简单的认为一般URL不会超过这个长度就没有问题了,却不知道这么做埋下了一个巨大的安
全隐患。轻则程序崩溃,重则可能成为病毒传播的摇篮。
  这里笔者推荐大家使用GoogleUrl,他直接的就避免了这个问题,使用C++的标准库为
基础,可移植性高,又方便安全地解决了URL解析的问题。
因为 GoogleUrl 是开源的一个 项目 ,我们可以 在 Google Code 中找
到:http://code.google.com/p/google-url/,直接用svn工具下载即可。GoogleUrl还依赖
一个第三方开源项目icu,这是一个将应用程序应用于国际化的一个项目,主要实现字符串
的编码转换,我们可以在http://www.icu-project.org/
下载好代码后里面有工程文件,设置好相关的项目环境,我们直接编译就可以得到
GoogleUrl的链接库了:googleurl.lib、base.lib和 icu的链接库:icuuc.lib。(ps.在附
件中已包含)
中找到关于他的相关说明和代码下
载(ps. 这个网站可能需要代理才能上)。
现在我们来看看GoogleUrl是怎么实现的:
首先是 GURL这个类,就是 GoogleUrl 的导出类,我们对Url 的操作也就是集中在这个
类上面。 

gurl()代码

从上面我们可以看到,GURL有上面几种初始化方式,我们一般都是用
GURL::GURL(const std::string& url_string)
这种初始化,如:
GURL gurl("http://user:123456@foo.tengattack.com:8080/index.php?action=init

本页地址 http://www.jybase.net/biancheng/20111212709.html

百度搜索更多

谷歌搜索更多

顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------

评价:
昵称: 验证码:点击我更换图片
推荐内容
赞助商
赞助商


关于本站免责声明视频更新google百度地图视频地图RRS订阅

如有什么问题请在本站留言,或发邮件到 hxt167#foxmail.com