URL - Fiddler - Wireshark - IIS

URL和URI

  • URI:Uniform Resource Identifier,唯一标识一个网络资源
  • URL:Uniform Resource Locator,指向网络资源地址

URL是URI的子集,只有提供了访问机制(http:// or ftp://)的URI才是URL。

通常URL是绝对路径,URI可以是相对或绝对路径。

趣解url和uri

URL标准格式:scheme://host[:port#]/path/.../[;url-params][?query-string][#anchor]

scheme //有我们很熟悉的http、https、ftp以及著名的ed2k,迅雷的thunder等。
host   //HTTP服务器的IP地址或者域名
port#  //HTTP服务器的默认端口是80,这种情况下端口号可以省略。如果使用了别的端口,必须指明,例如tomcat的默认端口是8080 http://localhost:8080/
path   //访问资源的路径
url-params  //所带参数
query-string    //发送给http服务器的数据
anchor //锚点定位  

URL详解 中,文中安利了一种解析URL各部分的方法,以备不时之需,赞!

转义处理

URL中特殊符号对应的十六进制编码

+:URL 中+号表示空格, %2B   
空格:URL中的空格可以用+号或者编码, %20   
/:分隔目录和子目录, %2F    
?:分隔实际的URL和参数, %3F    
%:指定特殊字符, %25    
#:表示书签, %23    
&:URL中指定的参数间的分隔符, %26    
=:URL中指定参数的值, %3D  

利用.Net中提供的 QueryString 方法,可以获取指定参数的值

HttpRequest.Request.QueryString["foo"]

该方法会将被转义的字符还原成原字符。

关于HtmlEncoe

将html源文件中不容许出现的字符进行编码,通常是编码以下字符:"<"、">"、"&"、"""、"'"等。

注意,Server、HttpServerUtility实体类、HttpUtility三者的HtmlEncode方法本质一样。

网址编码

JavaScript中编码方法

  • escape:不建议使用
  • encodeURI:用于对网址编码,但不包含参数,不对冒号(:)、斜杠(/)编码
  • encodeURIComponent:用于对URI中(指定)的参数编码,对空格,井号(#),斜线(/),冒号(:)都编码
// encodeURI
http://www.cnblogs.com/a file with spaces.html"
http://www.cnblogs.com/a%20file%20with%20spaces.html

// encodeURIComponent
http://www.cnblogs.com/?key="+encodeURIComponent(param)+"&page=1
http://www.cnblogs.com/?key=%E5%8D%9A%E5%AE%A2%E5%9B%AD&page=1

.Net中编码方法

  • Server.UrlEncode,HttpUtility.UrlEncode:不推荐,因为会对冒号(:)和斜杠(/)编码
  • Uri.EscapeUriString:用于对网址编码,但不包含参数,不对井号(#)、冒号(:)、斜杠(/)编码,类似JavaScript中的encodeURI方法
  • Uri.EscapeDataString:用于对URI中(指定)的参数编码,对冒号(:)、斜杠(/)、空格、井号(#)都编码,类似JavaScript中的encodeURIComponent方法

具体参见:从此不再惧怕URI编码:JavaScript及C# URI编码详解

Request.UrlReferrer

获取客户端上次请求的url的有关信息,具体参见:C# Request获取url

此处,给出几个应该注意的问题

  • 点击刷新按钮不会改变Request.UrlReferre,页面回发后会改变Request.UrlReferrer将其指向当前页面
  • “上一次”的url可能不存在(比如,直接地址栏输入当前页面链接),使用前需进行null判断
  • 上一页使用document.location方法或在Page_Load事件中Response.Redirect/Server.Transfer方式导航到当前页面,Request.UrlReferrer返回空值
  • 使用<a href>跳转,Request.UrlReferrer正常取值

https://blog.csdn.net/zhangzhentao/article/details/999029window.showModalDialog()问题

Fiddler

抓包工具,web代理服务器形式

  • 截获、重发、编辑、转存(查看不同终端上送的UserAgent信息)
  • 流量检测

将 Wi-Fi设置代理为本地的 ip和 port,port同 fiddler设置一样的。

具体参见:Fiddler工具介绍Fiddler抓包总结Fiddler学习

UserAgent

前面提及到 UserAgent,借此了解下

只读字符串,格式:navigator.userAgent = navigator.appCodeName/navigator.appVersion

身份验证,用于服务器识别客户端操作系统、浏览器版本等,UA字符串在每次浏览器HTTP请求时发送到服务器,传递APP的基础环境信息。

项目中遇到的一个UserAgent示例如下,当时的场景问题可参见:https://www.cnblogs.com/wjcx-sqh/p/9643047.html

MPBank/6.5.0 Android/8.0.0 AID/unNw0BpDFADZBxNmufXsIsSiuic= SID/aYIt8Og76a17J9SnAM2B1H5Vm2A= APPTag/1.0(N;1234)
"WeChat/7.0.0":APP版本
"Android/10.1":操作系统版本
"AID/3Cjzry0cxDdUGE5C5D2YjawFFcM=":APPID的映射值,只要不卸载APP不会发生变化
"SID/5u9IBC0FmjV1yn8L9HAdae+/EoA=":APP一次启动的SessionID,APP进程不退出不会再变化,重新启动会改变
"APPTag/1.0(N;1234)":APPTag用于特定业务标识,1.0表示该字段版本号,一般不变化;N表示当前APP风格为通用版,V表示为尊享版,具体页面根据N或V切换为相应风格;1234目前无意义
"WebView/WKWebView":iPhone客户端特有标识,表示当前使用的浏览器是WKWebView

不同客户端浏览器的UserAgent参数不尽相同,可参见:浏览器userAgent

探测UserAgent

  • Fiddler抓包
  • chrome://version/
  • F12 --> network -->  name -->Headers

其他工具

Paros

Web应用漏洞评估工具

  • HTTP会话分析:拦截+修改
  • 网络爬虫
  • 漏洞扫描

A Java based HTTP/HTTPS proxy for assessing web application vulnerability.

Postman

参见:Postman | 果冻想

 

Wireshark

近期post调用一个http核查服务,偶然间出现 操作超时:Timeout 的问题,经网络室抓包 .cap 在wireshark中打开,遇到的几个问题作下梳理

[1].Packet size limited during capture

一文,与数据大小及抓包长度设置有关: packet was bigger than snaplen set, so truncated when capture

[2].时间Time时间与实际时间相差8小时问题

在列 Time 上右键选择 Absolute date 并点OK即可

其他常见提示信息可查看:Packet size limited during capture抓包详解

 

问题整理

IP攻击

  • 一段时间内ip连接数大于一定值则断开该ip所有连接,且拒绝ip一定时间内连接
  • 一段时间内ip连接所发送的数据大于一定值则断开该ip所有连接,且拒绝ip一定时间内连接

参考:DoS攻击、CC攻击的攻击方式和防御方法

 

IIS

查看日志

路径:C:\inetpub\logs\LogFiles\

至于是在哪个 W3SVC 文件夹下,通过 站点右键 - 管理网站 - 高级设置 - ID

IIS管道托管模式

分为经典模式和集成模式。

在集成模式中,HTTP模块和HTTP处理程序不再定义于 <system.web> 中,而是定义于 <system.webServer> 中。 

基本问题解决

提示:无法访问此网站 localhost 拒绝了我们的连接请求。

可能原因:一般是默认网站状态没打开

解决:IIS-网站--Default Web site--重新启动

WebApi程序调用DB2问题

[HttpException (0x80004005):未能加载文件或程序集“IBM.Data.DB2”或它的某一个依赖项。试图加载格式不正确的程序。]    
 at System.Web.HttpRuntime.FirstRequestInit(HttpContext context) +12672788
 at System.Web.HttpRuntime.EnsureFirstRequestInit(HttpContext context) +159
 at System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest wr, HttpContext context) +12512141

原因分析:操作系统64位,但发布的程序引用了一些32位的ddl,出现了兼容性的问题

解决方案:IIS → 应用程序池 → 对应的程序池 → 高级设置 → 启用32位应用程序 :true

"ExceptionMessage": "SQL1159  Initialization error with DB2 .NET Data Provider,
 reason code 10, tokens 0.0.0, 9.7.9, Process Owner: IIS APPPOOL\\WebApi"

错误原因:用户无访问DB2权限。解决方案:

  • Step1:控制面板-管理工具-计算机管理-本地用户和组-组-IIS_IUSERS、DB2ADMNS、DB2USERS,在这三个组中分别添加应用程序池应用程序的名称
  • Step2:以管理员权限重启IIS(注:重启应用程序池无用):以管理员权限打开cmd,执行iisreset命令

 

posted @ 2018-10-12 20:54  万箭穿心,习惯就好。  阅读(433)  评论(0编辑  收藏  举报