关于web应用程序安全的思考(一)

在关于web应用程序安全的思考(序)中我曾提到﹕web应用程序的安全不应该依赖于客户端的请求信息 。

众所周知﹐http协议是开放的﹐因此谁都能向网络上公开的web服务器发送request请求﹐要求一个 URL(Uniform Resource Locator 统一资源定位符)。

所谓request﹐不过是符合http协议(即遵守http请求语法)的一大段字符串而已﹕

下面是一个aspx的请求示例﹕

GET /FrameWorkService/TestRequest.aspx HTTP/1.1
Connection: Keep- Alive
Accept: */*
Accept-Encoding: gzip, deflate
Accept-Language: zh-tw
Host: localhost
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.2; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30)
UA-CPU: x86

下面是一个web service的请求示例﹕

POST /testwssecurity/service2.asmx HTTP/1.1
Content-Length: 288
Content-Type: text/xml; charset=utf-8
Expect: 100-continue
Host: localhost
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; MS Web Services Client Protocol 2.0.50727.42)
SOAPAction: "http://tempuri.org/HelloWorld"
  
<?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><soap:Body><HelloWorld xmlns="http://tempuri.org/" /></soap:Body></soap:Envelope>

相信大家基本上能理解上述字符串的意义。这表明我们只要组织类似的字符串﹐然后发往相应的web服 务器﹐就可以请求到某个URL了﹐也就是说web请求不依赖浏览器(其实web也不依赖服务器﹐它只依赖http 协议)。

下面的这个程序是C#写的通过socket直接向web服务器发送http请求的示例﹕

 1using System;
 2using System.Text;
 3using System.IO;
 4using System.Net;
 5using System.Net.Sockets;
 6
 7public class server
 8{
 9    //建立socket連接
10    private static Socket ConnectSocket(string server, int port)
11    {
12        Socket s = null;
13        IPHostEntry hostEntry = null;
14        hostEntry = Dns.GetHostEntry(server);
15        foreach (IPAddress address in hostEntry.AddressList)
16        {
17            IPEndPoint ipe = new IPEndPoint(address, port);
18            Socket tempSocket =
19                new Socket(ipe.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
20            tempSocket.Connect(ipe);
21            if (tempSocket.Connected)
22            {
23                s = tempSocket;
24                break;
25            }
26            else
27            {
28                continue;
29            }
30        }
31        Console.WriteLine(s==null?"":"連接建立成功﹗");
32        return s;
33    }
34
35    //發送request請求并返回響應字串
36    private static string SocketSendReceive(string request,string server, int port)
37    {
38        Byte[] bytesSent = Encoding.ASCII.GetBytes(request);
39        Byte[] bytesReceived = new Byte[256];
40        Socket s = ConnectSocket(server, port);
41        if (s == null)
42            return ("連接失敗﹗");
43        Console.WriteLine("正在發送請求");
44        s.Send(bytesSent, bytesSent.Length, 0);
45        int bytes = 0;
46        StringBuilder responsestr = new StringBuilder();
47        Console.WriteLine("正在接收web服務器的回應");
48        do
49        {
50            bytes = s.Receive(bytesReceived, bytesReceived.Length, 0);
51            responsestr.Append(Encoding.UTF8.GetString(bytesReceived, 0, bytes));
52        }
53        while (bytes > 0);
54        return responsestr.ToString();
55    }
56
57    //獲取Request請求字符串
58    private static string getRequestStr()
59    {
60        StringBuilder sb = new StringBuilder();
61        sb.Append("GET /FrameWorkService/TestRequest.aspx?name=zkw&age=24 

HTTP/1.1\r\n");
62        sb.Append("Host: localhost\r\n");
63        sb.Append("Accept: */*\r\n");
64        sb.Append("Accept-Encoding: gzip, deflate\r\n");
65        sb.Append("Accept-Language: zh-tw\r\n");
66        sb.Append("User-Agent: Mozilla/8.0 (compatible; MSIE 7.0; Windows NT 5.2; 

.NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30)\r\n");
67        sb.Append("UA-CPU: x86\r\n");
68        sb.Append("Cookie: ASP.NET_SessionId=g5vz3k55q4dhgy3dvmm3dj4x\r\n");
69        sb.Append("Connection: Close\r\n\r\n");
70        return sb.ToString();
71    }
72
73    public static void Main(string[] args)
74    {
75        string requeststr = getRequestStr();
76        Console.WriteLine("請求字串如下﹕\n{0}",requeststr);
77        string result = SocketSendReceive(requeststr,"localhost",80);
78        Console.WriteLine(result);
79        Console.ReadLine();
80    }
81}

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索web
, string
, 字符串
, append
, console
, WriteLine
100-continue
web应用程序开发技术、web应用程序、web应用程序开发、web应用程序设计、asp.net web应用程序,以便于您获取更多的相关知识。

时间: 2024-08-30 12:14:27

关于web应用程序安全的思考(一)的相关文章

关于web应用程序安全的思考(二)

我想在我提出使用URL进行安全管控作为我的web应用程序安全的基础,一定有很多网友的不解,所以 就先解释一下这个问题吧. 使用URL进行权限管控的意思是: 1.在上篇中我说过,web应用程序的本质其实就是Request.所以要让您的web应用程序安全,最直接最 有效的手段就是让每一次Request都置于你的管控范围之内.这就好比您的web应用程式是一个大型游乐场 ,而您的安全模组就是这个游乐场的入口检票处.这样凡是要进行您的游乐场的人员,必须都已经通过了 您的资格认定了,在web应用程序中它们是

关于web应用程序安全的思考(五):一切皆URL

先总结一下web应用程序安全管控的要点﹕ 1.在每次客户端请求(Request)时进行安全管控(原因和作法请参考思考2) 2.安全管控分为认证和授权(二者完全分离﹐单独实现﹐参考思考2的代码示例) 3.认证即识别请求者是谁(提取用户标识或匿名登录)(作法简单﹐一般采用Session或Cookie实现) 4.授权即判断用户是否有被请求的资源(URL)的权限(本篇解释) 5.如果没有权限就转入无权处理过程,由它视相关的情形向用户报错(如aspx和asmx的报错过程应该不 一样). 要判断用户是否有被

关于web应用程序安全的思考(序)

曾经在一家公司短暂的几天工作中有过这样的经历.上班的第一天﹐同组做web的一位同事帮我开了一 个账号﹐要我上公司的管理系统看一下公司的规章制度. 百无聊赖的看完后﹐随便点了一下左边的"员工基本信息查询"菜单﹐页面的数据显示区域 显示"您无权限查看此页"﹐本想退出﹐但发现页面的查询条件输入区域存在﹐而且查询按钮只 是灰掉而已﹐在查看原始码后﹐抱着试一下的心态﹐我在浏览器的地址栏输入一句js脚本 (javascript:alert(document.all['query

关于Web应用程序安全的思考(三)

应用程序的安全管控包括管控的时机和方法两个方面﹐即在哪里或什么时候进行管控﹐和使用什么依 据进行权限管控. 在前几篇中﹐我提到在web应用程序进行安全管控的时机是在每次Request到达真正的应用程序之前进 行﹐现在在总结一下其特点﹕ 1.这种方式不会出现未管控的死角(每次请求都会进行﹐每次动作都会经过验证)﹐并且抽象出web应用 程序的本质(所有的服务器端程序都是在客户端request后)﹐这样也就可以与业务系统解耦﹐单独设计了 . 2.在每次执行前就进行权限管控应该更安全﹐因为用户在没有授权

关于web应用程序安全的思考(四):一种全新的权限管控思想

我以一个实际的小型订单管理系统为例来实现这种权限设计方案﹐也欢迎大家能提出自己的权限设计 方案来对比﹕ 某某公司在线订单管理系统的用户需求说明书﹕ 1.要求系统实现﹕下单﹐订单维护(包括修改和删除订单)﹐订单审核﹐收款﹐发货﹐各种单据的查询 和报表功能. 2.只有注册用户才可以下单 3.用户可以修改和删除他自己的未审核订单 4.管理员可以删除未审核的所有订单 5.销售经理进行订单审核﹐但只可审核其所在区域的订单﹐管理员可以审核所有区域的订单 6.财务部门可以进行订单收款确认动作 7.仓库管理者在

测试Web应用程序是否存在跨站点脚本漏洞

到目前为止,对于跨站点脚本攻击具有很大的威胁这一点大家并无异议.如果您很精通 XSS 并且只想看看有什么好的测试方法可供借鉴,那么请直接跳到本文的测试部分.如果您对此一无所知,请按顺序认真阅读!如果某个怀有恶意的人(攻击者)可以强迫某个不知情的用户(受害者)运行攻击者选择的客户端脚本,那么便会发生跨站点脚本攻击."跨站点脚本"这个词应该属于用词不当的情况,因为它不仅与脚本有关,而且它甚至不一定是跨站点的.所以,它就是一个在发现这种攻击时起的一个名字,并且一直沿用至今.从现在开始,我们将

使用Flex和Dojo开发交互式Web应用程序

简介:本文分为四个部分,首先简单介绍交互式 Web 应用程序的体系结构,分析 Dojo 技术和 Flex 技术的用途:然后通过一个具体实例来讲述 Flex 应用程序的开发及与传统 Web 项目的结合:其次同样 通过实例介绍如何在 Web 客户端中使用 Dojo 技术,及如何和后台服务进行交互,最后分析 Flex 技术 和 Dojo 技术结合使用这种模式在交互式 Web 应用程序中的可行性和所具有的优势.通过本文的讲解, 一方面读者能够清楚的了解到同时使用 Flex 和 Dojo 的必要性.可行性

Web应用程序的开发步骤

如今已进入了web2.0高速发展的互联网时代,各种互联网的Web应用程序如雨后春笋般出现.那么作为一名Web开发人员,怎样去开发一款优秀的Web应用程序呢?这个问题没有一个简单的答案,甚至那些教育机构都未必能清楚的知道.所以,像大多数在这个领域里的web开发人员一样,我们只是通过去做,去实验才学会了这些.没有人告诉我们如何去做,我们从给自己做点什么东西开始,学会如何开发web应用程序是在这个过程中的一个副产品.这是学习任何语言的一个非常有效的方法. Web应用程序与网站之间的区别 首先,我要说明

商务Web应用程序的界面设计

商务Web应用程序的界面设计 商务Web应用程序的设计常常被人们所忽视.我看到许多程序,它们既不符合商业目标,也不满足用户需求,它们有很差的用户体验,并造成了商业利润的损失.更夸张的是,有些设计师根本没有参与整个程序的开发流程,而是把全部职责都推给了开发人员. 对于擅长前端和后台技术的工程师来说,他们缺乏设计能力,很难完成这项艰巨的任务.不满意的消费者.沮丧的用户,以及失败的项目,也就自然而然地出现了. 接下来,我们将介绍"商务Web应用程序"界面设计的基础知识.一般来说,人们可以提供