`
落地窗
  • 浏览: 438179 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

服务器是怎么要求客户端强行弹出身份验证窗口的

阅读更多
我们访问tomcat服务器的时候如果试图访问Tomcat Manager就会发现浏览器弹出一个登陆对话框,和我们平常的网页对话框不同,而且查看页面的时候查不到生成这个对话框的代码,禁止脚本也毫无作用。手头的资料对这个东西没有任何介绍,它到底是怎么弹出来的呢?


用jmeter创建一个http request的sampler,再建一个view result tree的lisenter来看看服务器返回了些什么污七八糟的:

HTTP response headers:
HTTP/1.1 401 Unauthorized
Pragma: No-cache
Cache-Control: no-cache
Expires: Thu, 01 Jan 1Array70 08:00:00 CST
WWW-Authenticate: Basic realm="Tomcat Manager Application"
Content-Type: text/html;charset=utf-8
Content-Length: Array54
Date: Thu, 30 Jun 2005 0Array:27:26 GMT
Server: Apache-Coyote/1.1


嘿嘿,原来是一个带WWW-Authenticate的401错误啊。自己写个jsp模拟一下看看怎么样:

<%
response.addHeader("WWW-Authenticate","Basic realm=\"Tomcat Manager Application\"");
response.sendError(401,"Unauthorized");
%>

果然,一个一模一样的登陆窗口跳出来了。不过身份验证的具体过程要怎么做呢?google了一下,果然看到好东西了: http://www.chinadata.cn/showContent.asp?projectID=2083



按照说明构造了一个jsp文件:





<%
sun.misc.BASE64Decoder decoder = new sun.misc.BASE64Decoder();
boolean authenticated = false;
String authorization = request.getHeader("authorization");
System.out.println("authorization:"+authorization);
if (authorization != null) {
  if (authorization.startsWith("Basic")){
    authorization = authorization.substring(authorization.indexOf(’ ’)+1);
    byte[] bytes = decoder.decodeBuffer(authorization);
    authorization = new String(bytes);
    String userName = authorization.substring(0,authorization.indexOf(’:’));
    String password = authorization.substring(authorization.indexOf(’:’)+1);
    System.out.println("userName:"+userName);
    System.out.println("password:"+password);
    authenticated =userName.equals("abc") && password.equals("abc");
  }else if (authorization.startsWith("Digest")){
    String userName = authorization.substring(authorization.indexOf("username="));
    userName = userName.substring("username=\"".length());
    userName = userName.substring(0,userName.indexOf(’"’));
    String password = authorization.substring(authorization.indexOf("response="));
    password = password.substring("response=\"".length());
    password = password.substring(0,password.indexOf(’"’));
    authenticated =userName.equals("abc") && password.equals("3cf1135d3b8e20ddArray272d0628856Arraya56");
  }
}
if (!authenticated){
  //   response.addHeader("WWW-Authenticate","Digest realm=\"Tomcat Manager Application\"");
  response.addHeader("WWW-Authenticate","Basic realm=\"Tomcat Manager Application\"");
  response.sendError(401,"Unauthorized");
}else{
  out.println("hello abc");
}
%>



cool,和tomcat一模一样的登陆页面做出来了。

用户名密码均为abc,hard code在代码里面了。不过还没查到Digest方式的情况下是对哪些信息进行MD5的

分享到:
评论

相关推荐

    WCF 身份验证 通过检查客户端IP

    总结来说,WCF身份验证通过检查客户端IP是一种简化的方法,适用于对安全性要求不是特别高但又希望控制访问来源的场景。它提供了灵活性和便捷性,但也有其局限性,需要根据实际需求和环境进行权衡。

    自签署根证书、服务器证书、客户端证书

    在网络安全领域,证书是保障通信安全的关键元素,主要用于身份验证和数据加密。本文将深入探讨“自签署根证书”、“服务器证书”以及“客户端证书”的概念、用途和操作流程。 首先,我们来看“自签署根证书”。根...

    FTP客户端和服务器,ftp客户端和服务器有什么不同,Visual C++

    它分为客户端和服务器两个部分,各自承担不同的职责。FTP客户端是用户用来连接到FTP服务器并执行文件操作的软件,如上传、下载、删除等。而FTP服务器则是接收客户端请求,处理文件操作,并向客户端返回结果的服务端...

    c++ websocket服务器和html客户端

    WebSocket服务器的主要任务是接收来自客户端的连接请求,验证握手过程,维持连接状态,并处理从客户端接收到的数据,同时将响应发送回客户端。 - **Websocket.sln**: 这是Visual Studio的解决方案文件,包含了项目...

    Android 客户端与服务器端进行数据交互Demo(包含服务器端和客户端)

    8. **数据验证**: 在Demo中提到了“验证”功能,这可能包括身份验证(如OAuth、JWT)、数据有效性验证(如JSON Schema)等,确保客户端发送的数据符合服务器的预期。 9. **错误处理**: 客户端需要处理各种可能出现...

    ASP.NET类似MSN弹出提示窗口

    总结来说,ASP.NET中实现类似MSN的弹出提示窗口,需要结合服务器端和客户端的技术,利用特定的DLL或自定义的JavaScript库,以提供用户友好的交互体验。这个过程涉及编程、UI设计和网络通信等多个方面,对于提升网站...

    CAS服务器端与客户端jar包(服务器端)

    如果用户未登录,客户端会重定向用户至CAS服务器进行身份验证;验证成功后,用户会被返回到原始请求的应用系统,并自动登录。 3. **部署与配置**:部署CAS服务器涉及安装和配置服务器环境,包括设置Tomcat或Jetty等...

    基于C#的FTP服务器、客户端设计

    FTP服务器的核心职责是接收并响应来自客户端的FTP命令,如LIST(列出目录内容)、RETR(下载文件)和USER/PASS(身份验证)。在C#中,可以使用System.Net.FtpServer库来实现这些功能。首先,我们需要创建一个自定义...

    基于open62541的服务器和客户端

    它提供了完整的堆栈实现,包括身份验证、加密、数据模型和信息模型的定义,以及客户端和服务器之间的通信协议。开发者可以利用这个库轻松地在自己的应用程序中集成OPC UA功能。 3. **服务器和客户端**: 在OPC UA中...

    用友客户端连接不上服务器 (分客户端和服务器问题 )

    客户端连接不上服务器 (分客户端和服务器问题 )

    FTP服务器与客户端程序(c++)

    2. **命令交互**:客户端发送FTP命令,如`USER`、`PASS`进行身份验证,`LIST`获取目录信息,`RETR`下载文件,`STOR`上传文件等。 3. **数据通道管理**:客户端需要管理数据连接,这可能是通过控制连接的命令设置的,...

    oauth2全套(授权服务器+资源服务器+客户端独立版)

    用户在授权服务器上进行身份验证,然后根据用户的授权决定是否向客户端发放访问令牌。 **资源服务器(OAuth Resource Server)** 资源服务器是存储和提供受保护资源的服务器,它接收携带访问令牌的请求,并验证令牌...

    服务器客户端说明

    无锡监狱项目的服务器客户端通信涉及到四个主要部分:轮巡、报警、预案权限管理和新增窗口状态。这些功能都是通过服务器和客户端之间的交互实现的,其中轮巡功能的实现尤为关键。 【轮巡功能详解】 1. **轮巡需求*...

    echo服务器和客户端程序

    在IT领域,网络通信是核心部分之一,而“echo服务器和客户端程序”是学习网络编程时常见的基础示例。这个概念通常用于展示TCP或UDP协议的基本工作原理,以及如何实现客户端与服务器之间的数据交换。 首先,我们要...

    标准的ftp服务器和客户端实现

    有些服务器还支持匿名访问,允许用户无需身份验证即可浏览和下载公开文件。 2. **控制连接**:当客户端与服务器建立连接时,首先建立的是控制连接。这个连接用于发送命令(如登录、列出目录、上传或下载文件)并...

    QT多线程TCP服务器客户端通讯程序

    在QT网络编程中,服务器往往需要和多个客户端保持连接,因此,我在熟悉多线程编程过程中,在TCP服务每接收到一个客户端连接请求,就新建一个线程。客户端也是在新建的线程中维护的。 程序的思路如下: 程序使用了非...

    C# Socket_服务端向指定的客户端发送消息(包含服务器)

    在本文中,我们将深入探讨如何使用C#的Socket编程来实现一个简单的聊天应用程序,其中包含服务器和客户端的交互。...通过学习和实践这些概念,你可以创建出自己的网络应用程序,实现服务器与客户端之间的高效通信。

    MQTT服务器和客户端的选型

    ### MQTT服务器和客户端的选型 #### MQTT简介与特点 MQTT(Message Queuing Telemetry Transport)是一种基于发布/订阅模式的轻量级消息传输协议,适用于低带宽、高延迟或不可靠的网络环境。它由IBM在1999年设计并...

    vc做的局域网聊天系统,包含服务器客户端,文件传输,发送窗口抖动

    这是一个基于VC++开发的局域网聊天系统,涵盖了多个关键功能点,包括服务器与客户端通信、文件传输、系统托盘操作以及窗口抖动通知。下面将详细解释这些知识点。 1. **VC++**:VC++是Microsoft开发的一种编程环境,...

    Delphi 实现FTP服务器与客户端源码

    2. **FTP命令发送**:客户端根据用户的需求,发送各种FTP命令给服务器,如登录、改变目录、列出文件、上传或下载文件。 3. **数据传输**:FTP使用控制连接(用于命令交换)和数据连接(用于文件传输)。客户端需要...

Global site tag (gtag.js) - Google Analytics