资源预览内容
第1页 / 共399页
第2页 / 共399页
第3页 / 共399页
第4页 / 共399页
第5页 / 共399页
第6页 / 共399页
第7页 / 共399页
第8页 / 共399页
第9页 / 共399页
第10页 / 共399页
亲,该文档总共399页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
第第1章章 配置配置ASP.NET网网页运行和开发环境页运行和开发环境任务任务目标目标l安装及配置Visual Studio 2005开发环境l安装及配置IISl安装SQL Server Management Studio Expressl规划及设计项目网站功能计算机学院计算机学院WebWeb开发与安全防范开发与安全防范2技能目标技能目标l了解C#语言l安装Visual Studio 2005,了解安装必需的系统配置,熟悉开发环境,了解网站的开发过程l选择对应的IIS并安装,并掌握IIS安全配置方法l获取并安装可视化的SQL Server数据管理工具l规划并设计本项目网站计算机学院计算机学院WebWeb开发与安全防范开发与安全防范3技能基础:Visual C#入门计算机学院计算机学院WebWeb开发与安全防范开发与安全防范41.1 C#简介简介lC是Microsoft在Visual studio .net中推出的一种新型程序设计语言,具有面向组件、功能强大和灵活等特点。lC是由 C/C+语言发展而来的,与C+和Java非常类似,样式清晰,可读性强,易于掌握。lC与C/C+具有继承关系,保留和扩展了C/C+的功能,C+开发人员易于熟悉掌握;l使用C可以快速地编写各种基于MicrosoftNET平台的应用程序,由于MicrosoftNET提供了一系列工具和服务,因此C程序开发具有更高的效率。计算机学院计算机学院WebWeb开发与安全防范开发与安全防范5第一个C#控制台程序,请同学分析程序功能using System;using System.Collections.Generic;using System.Text;namespace ex1_1 class Program static void Main(string args) Console.Write(请输入您的姓名:); string name=Console.ReadLine(); /输入姓名字符串赋值给name变量 Console.WriteLine(Hello, + name+ WriteLine); Console.Write(Hello, + name+Write); Console.Write(第一个C#控制台程序 ); Console.ReadLine(); 计算机学院计算机学院WebWeb开发与安全防范开发与安全防范61.2 Visual C#数据类型数据类型lC的数据类型分为值类型、引用类型和指针类型计算机学院计算机学院WebWeb开发与安全防范开发与安全防范7C#的数据类型值类型引用类型简单类型结构类型枚举类型整数类型实数类型字符类型布尔类型值类型值类型l 值类型表示实际的数据,存储在堆栈中。将一个值类型变量赋给另一个值类型变量时,将复制包含的值,对其中一个变量操作时,不影响其他变量。C#中的多数基本类型都是值类型。值类型包括简单类型、枚举类型和结构类型。计算机学院计算机学院WebWeb开发与安全防范开发与安全防范8类类 别别位位 数数类类 型型范围范围/精度精度有符号整型8sbyte-12812716short-327683276732int-2147483648214748364764long-92233720368547758089223372036854775807无符号整型8byte025516ushort06553632uint0429496729564unlong018446744073709551615浮点32float1.5e-453.4e3864double5.0e-3241.7e308Decimal128decimal1.010e-287.910e28Unicode字符16 charU+0000U+ffff布尔值booltrue/false9 引用类型表示指向数据的指针或引用,可存储对实际数据的引用。引用类型在内存中的存储位置仅包含对对象的地址的引用。引用类型为null时,表明没有引用任何对象,引用类型包括类、接口、数组和字符串。引用类型结构如图所示。10引用类型引用类型1.3 数据类型转换数据类型转换l1. 隐式类型转换l2. 显式类型转换计算机学院计算机学院WebWeb开发与安全防范开发与安全防范11隐式类型转换隐式类型转换隐式类型转换是指不需要声明就能进行的转换。进行隐式类型转换时,编译器不需要进行检查就能安全地进行转换,下表列出了可以进行隐式类型转换的数据类型。源源 类类 型型目目 标标 类类 型型sbyteshort、int、long、float、double、decimalbyteshort、ushort、int、uint、long、ulong、float、double或decimalshortint、long、float、double或decimalushortint、uint、long、ulong、float、double或decimalintlong、float、double或decimaluintlong、ulong、float、double 或 decimalcharushort、int、uint、long、ulong、float、double或decimalfloatdoubleulongfloat、double或decimallongfloat、double或decimal12显式类型转换也可以称为强制类型转换,它需要在代码中明确地声明要转换的类型。如果在不存在隐式转换的类型之间进行转换,就需要使用显式类型转换。下表列出了需要进行显式类型转换的数据类型。源源 类类 型型目目 标标 类类 型型sbytebyte、ushort、uint、ulong或charbytesbyte和charshortsbyte、byte、ushort、uint、ulong或charushortsbyte、byte、short或charintsbyte、byte、short、ushort、uint、ulong或charuintsbyte、byte、short、ushort、int或charcharsbyte、byte或shortulongsbyte、byte、short、ushort、int、uint、long或charlongsbyte、byte、short、ushort、int、uint、ulong或chardoublesbyte、byte、short、ushort、int、uint、ulong、long、char或decimalfloatsbyte、byte、short、ushort、int、uint、long、ulong、char或decimal13显式类型转换显式类型转换小结小结l掌握C# 语句的基础数据类型l掌握数据类型转换的原则计算机学院计算机学院WebWeb开发与安全防范开发与安全防范14“十二五十二五”职业教育国家规划教材(经全国职业职业教育国家规划教材(经全国职业教育教材审定委员会审定)教育教材审定委员会审定) 高等职业教育精品示范教材(信息安全系列)高等职业教育精品示范教材(信息安全系列)Web开发与安全防范开发与安全防范第第1章章 配置配置ASP.NET网网页运行和开发环境页运行和开发环境任务一:认识ASP.NETVS 2005简介简介lVisual Studio 2005是经典的ASP.NET开发环境,它是一套完整的开发工具,用于生成ASP.NET Web应用程序、XML Web Service、桌面应用程序和移动应用程序。lVisual Studio 2005开发环境允许使用Visual Basic.NET、Visual C+.NET、Visual C#.NET和Visual J#.NET,并可以创建混合语言解决方案计算机学院计算机学院WebWeb开发与安全防范开发与安全防范171.1 ASP.NET开发环境搭建开发环境搭建l1.安装Visual Studio 2005 的系统要求lWindows 2000、Windows XP及以上系统。lCPU建议使用1GHz以上的Pentium微处理器。l系统内存推荐值为1GB以上。l硬盘空间至少为1GB以上计算机学院计算机学院WebWeb开发与安全防范开发与安全防范182.安装过程安装过程l初学者可以到微软官方网站上下载Visual Studio 2005中文版的安装文件,并按提示安装即可。计算机学院计算机学院WebWeb开发与安全防范开发与安全防范193.配置配置Visual Studio 2005开发环境开发环境l第一次打开Microsoft Visual Studio 2005时,会弹出“选择默认环境设置”对话框,这里选择“Visual C#”。计算机学院计算机学院WebWeb开发与安全防范开发与安全防范201.2 IIS安装及安全配置安装及安全配置l1.安装IIS(示例,不同系统的安装方式并不完全相同)l将Windows 7操作系统光盘放到光盘驱动器中,依次打开“控制面版”/“程序”,选择“程序和功能”/“打开或关闭Windows功能”,弹出“Windows功能”窗口。计算机学院计算机学院WebWeb开发与安全防范开发与安全防范21l选择“Internet信息服务”复选框,确定后进行安装。l打开“控制面板”/“系统和安全”/“管理工具”,在其中可以看到“Internet信息服务(IIS)管理器”选项。2.IIS安全配置安全配置l具体步骤见教材计算机学院计算机学院WebWeb开发与安全防范开发与安全防范221.3 Visual Studio.NET开发环境介绍开发环境介绍l1.创建ASP.NET网站l在菜单栏中选择“文件”/“新建”/“网站”/“新建网站”/“ASP.NET网站”l用户设置网站的名字及位置,完成网站的创建。计算机学院计算机学院WebWeb开发与安全防范开发与安全防范232.设计设计Web页面页面l(1)加入ASP.NET网页l在“解决方案资源管理器”面板中选中当前项目,单击右键,在弹出的菜单中选择“添加新项”可以在网站中加入ASP.NET网页计算机学院计算机学院WebWeb开发与安全防范开发与安全防范24lASP.NET网页就是“Web窗体”,其扩展名为.aspx,文件名可自行定义,默认为Default。l加入新网页时需要设定编写网页里程序时使用的语言,这里选择“Visual C#”语言。lWeb窗体网页都有两种视图方式,分别为“设计”、“源”视图,两种方式可以切换。计算机学院计算机学院WebWeb开发与安全防范开发与安全防范25l(2)布局ASP.NET网页l使用Table表格布局,另一种是使用CSS+DIV布局。使用Table表格布局时,在Web窗体中添加一个HTML格式表格,然后根据位置的需要,向表格中添加相关文字信息或服务器控件;l使用CSS+DIV布局时,需要通过CSS样式控制Web窗体中的文字信息或服务器控件的位置,这需要精通CSS样式。l(3)添加服务器控件l添加服务器控件既可以通过拖拽的方式添加,也可以通过ASP.NET网页代码添加。计算机学院计算机学院WebWeb开发与安全防范开发与安全防范263.添加配置文件添加配置文件Web.configl在Visual Studio2005中创建网站之后,需要手动添加Web.config配置文件。l在“解决方案资源管理器”面板中,右击网站名称,在弹出的快捷菜单中选择“添加新项”命令,打开“添加新项”对话框,选择“Web.配置文件”选项,单击“添加”按钮即可。计算机学院计算机学院WebWeb开发与安全防范开发与安全防范274.运行应用程序运行应用程序l方法1:选择“测试”/“启动调试”命令运行应用程序l方法2:单击工具栏中的 按钮运行应用程序;还可以直接按F5键运行程序。计算机学院计算机学院WebWeb开发与安全防范开发与安全防范28l注意:第一次运行网站时会弹出“未启用调试”对话框,提示用户有“修改Web.config文件以启用调试”和“不进行调试直接运行”两种选择,一般选中前者。计算机学院计算机学院WebWeb开发与安全防范开发与安全防范29小结小结l掌握vs的安装方法l能够配置IISl熟悉并掌握VS的运行环境,会创建简单网站,了解每种文件类型的用途。计算机学院计算机学院WebWeb开发与安全防范开发与安全防范30“十二五十二五”职业教育国家规划教材(经全国职业职业教育国家规划教材(经全国职业教育教材审定委员会审定)教育教材审定委员会审定) 高等职业教育精品示范教材(信息安全系列)高等职业教育精品示范教材(信息安全系列)Web开发与安全防范开发与安全防范第第1章章 配置配置ASP.NET网网页运行和开发环境页运行和开发环境任务二:数据库安装与设计l在安装Visual Studio 2005的任务过程中,默认安装了可以免费使用的数据库SQL Server 2005 Express,但SQL Server 2005 Express本身并没有提供可视化的工具来使用和管理SQL Server 2005数据库,要实现可视化的管理,需要SQL Serve Management Studio Express。计算机学院计算机学院WebWeb开发与安全防范开发与安全防范332.1 SSMSE的安装的安装l官方网站有能够下载ssmse,下载之后即可安装计算机学院计算机学院WebWeb开发与安全防范开发与安全防范342.2 启动启动SSMSEl安装完毕之后,启动ssmse,操作界面和数据库操作界面是一致的,登陆、创建及附加数据库的方法也一致,在此不再阐述计算机学院计算机学院WebWeb开发与安全防范开发与安全防范35小结小结l掌握ssmse的下载及安装方法l读者也可以另外完全安装SQL SERVER2005计算机学院计算机学院WebWeb开发与安全防范开发与安全防范36“十二五十二五”职业教育国家规划教材(经全国职业职业教育国家规划教材(经全国职业教育教材审定委员会审定)教育教材审定委员会审定) 高等职业教育精品示范教材(信息安全系列)高等职业教育精品示范教材(信息安全系列)Web开发与安全防范开发与安全防范第第1章章 配置配置ASP.NET网网页运行和开发环境页运行和开发环境任务三:网站项目规划设计3.1 网站结构分析网站结构分析l整个网站的页面层次结构分为4个层次计算机学院计算机学院WebWeb开发与安全防范开发与安全防范393.2 网站功能分析网站功能分析l1.首页计算机学院计算机学院WebWeb开发与安全防范开发与安全防范40l2.简历页面计算机学院计算机学院WebWeb开发与安全防范开发与安全防范41l3.链接页面计算机学院计算机学院WebWeb开发与安全防范开发与安全防范42l4.注册页面计算机学院计算机学院WebWeb开发与安全防范开发与安全防范43l5.相册管理l相册管理和相册浏览两个部分l相册的管理主要实现相册的增加、修改、删除等功能;l包括3个页面,都存放在项目中的Admin目录下,该目录对用户设置权限,它们分别是相册Albums.aspx页面、某一相册照片Photos.aspx网页以及某张照片Details.aspx网页l相册的浏览主要实现相册的显示、相册中照片的显示等功能计算机学院计算机学院WebWeb开发与安全防范开发与安全防范44l6.相册浏览l相册的浏览被设置了权限,一般的浏览者,可以浏览相册属性设置为公开的相册内容,对于注册用户,如果属于Administrators角色或者Friends角色,通过登录进入项目化教程网站,还可以浏览那些相册属性设置为不公开的相册内容。l相册的浏览有3个页面,分别存放在项目的根目录下,分别是显示相册内容的Albums.aspx页面、显示某一相册中所有照片的Photos.aspx网页、显示某张照片的Details.aspx网页。计算机学院计算机学院WebWeb开发与安全防范开发与安全防范45小结小结l通过 本任务,学会分析网站功能并进行合理的规划计算机学院计算机学院WebWeb开发与安全防范开发与安全防范46单元练习单元练习l1.如何在IIS中运行个人网站?能够实现登录功能吗?l2.简述在Visual Studio.NET 2005环境下创建ASP.NET应用程序的过程。l3.简述运行ASP.NET网页的方法。l4.建立一个网站,在网站中添加一个网页,其中包含一个命令按钮Button和一个标签Label,当用户单击Button时,在Label中显示“第1章”。计算机学院计算机学院WebWeb开发与安全防范开发与安全防范47“十二五十二五”职业教育国家规划教材(经全国职业职业教育国家规划教材(经全国职业教育教材审定委员会审定)教育教材审定委员会审定) 高等职业教育精品示范教材(信息安全系列)高等职业教育精品示范教材(信息安全系列)Web开发与安全防范开发与安全防范第第2章章 建立建立Web页面及页面及Http处理程序处理程序 任务目标任务目标l如何新建数据库、数据表l如何建立Web页面l如何编写页面代码l如何建立Http处理程序l如何进行页面间传值的安全防范计算机学院计算机学院WebWeb开发与安全防范开发与安全防范50技能目标技能目标l建立相册、照片数据库并分析数据关系图l建立Web页面查询照片名并编写页面代码l建立Http处理程序l掌握页面间传值的安全解决方法计算机学院计算机学院WebWeb开发与安全防范开发与安全防范512.1 C#程序代码的程序代码的 基本书写规则基本书写规则l1.程序代码区分字母大小写l 例如“Console”和“console”是不同的标识符。l2.语句书写规则l (1)每个语句都必须用一个分号(“;”)作为结尾。l (2)C#允许在同一个代码行上书写多个语句。l (3)每个代码块用一对花括号(“”、“”)来界定。l (4)语句中作为语法成分的标点符号必须是西文标点符号,中文标点符号只能作为字符常量使用。l (5)代码块的书写广泛采用缩进格式。计算机学院计算机学院WebWeb开发与安全防范开发与安全防范52l3.注释信息 l 恰当地使用注释有助于提高程序的可读性。 l(1)单行注释l方式 1:string name = Console.ReadLine();/输入姓名字符串赋值给 name 变量l方式 2:/输入姓名字符串赋值给 name 变量lstring name = Console.ReadLine();l(2)多行注释: 从“/*”开始,到“*/”结束。l(3)XML 注释计算机学院计算机学院WebWeb开发与安全防范开发与安全防范532.2 常量与变量常量与变量l1.常量l 常量就是在程序的使用过程中值保持不变的量。例如: lconst double PI=3.14159265;lconst int hour = 7, minute = 25, second = 30;l2.变量l在程序运行过程中,其值可以改变的量称为变量(Variable) 。示例:l int y= 1;/给变量y初始化为1l string greet”Hello,World”; 计算机学院计算机学院WebWeb开发与安全防范开发与安全防范54l(1)静态变量和实例变量 l用static修饰符声明的变量称为静态变量,未用static修饰符声明的变量称为实例变量。例如: lpublic static long id = 1027; lpublic int number; lpublic decimal price; l int animals = new int2; 计算机学院计算机学院WebWeb开发与安全防范开发与安全防范55l(2)局部变量 l在块、for 语句、switch 语句、 using 语句、函数中声明的变量称为局部变量。 l(3)隐式类型的局部变量 l可以不给出其所属的数据类型,而由编译器根据变量的初始值推断出变量的数据类型,例如: lvar age = 30; lvar name = 张三;l注意:其实,使用隐式类型的局部变量是有限制的。 计算机学院计算机学院WebWeb开发与安全防范开发与安全防范562.3 任务一:建立数据库任务一:建立数据库 l2.3.1 新建数据库计算机学院计算机学院WebWeb开发与安全防范开发与安全防范57计算机学院计算机学院WebWeb开发与安全防范开发与安全防范58l用鼠标右键点击“对象资源管理器”窗格下的Personal数据库,在弹出的快捷菜单中单击“新建查询”命令,打开执行SQL语句的界面, 如图2-4所示。 计算机学院计算机学院WebWeb开发与安全防范开发与安全防范59建表建表SQLlCREATE TABLE dbo.Albums(lAlbumID int IDENTITY(1,1) NOT NULL,lCaption nvarchar(50) NOT NULL,lIsPublic bit NOT NULLl)lALTER TABLE dbo.Albums ADD CONSTRAINT PK_Albums lPRIMARY KEY (AlbumID)计算机学院计算机学院WebWeb开发与安全防范开发与安全防范60lCREATE TABLE dbo.Photos(lPhotoID int IDENTITY(1,1) NOT NULL,lAlbumID int NOT NULL,lCaption nvarchar(50) NOT NULL,lOriginalFileName nvarchar(50) NOT NULL,lLargeFileName nvarchar(50) NOT NULL,lMediumFileName nvarchar(50) NOT NULL,lSmallFileName nvarchar(50) NOT NULLl) lALTER TABLE dbo. Photos ADD CONSTRAINT PK_Photos lPRIMARY KEY (PhotoID)lALTER TABLE dbo.Photos ADD CONSTRAINT FK_Photos_Albums lFOREIGN KEY(AlbumID) REFERENCES dbo.Albums (AlbumID计算机学院计算机学院WebWeb开发与安全防范开发与安全防范612.3.2 分析数据库分析数据库计算机学院计算机学院WebWeb开发与安全防范开发与安全防范622.4 任务二:建立任务二:建立Web页面查询页面查询照片名照片名l照片的文件存放位置计算机学院计算机学院WebWeb开发与安全防范开发与安全防范63l2.4.1新建Web页面计算机学院计算机学院WebWeb开发与安全防范开发与安全防范64l从工具箱中拖放1个Panel、1个TextBox、1个Button控件到DefaultLook.aspx的设计视图计算机学院计算机学院WebWeb开发与安全防范开发与安全防范65l再从工具箱拖放1个Panel、1个Literal控件到DefaultLook.aspx的设计视图,并将控件的属性Text改为“得到文件名”计算机学院计算机学院WebWeb开发与安全防范开发与安全防范66l最后得到的代码计算机学院计算机学院WebWeb开发与安全防范开发与安全防范67l4.2编写Web页面的代码l双击控件“得到文件名”转到代码视图,在Button1_Click事件中写入代码计算机学院计算机学院WebWeb开发与安全防范开发与安全防范68计算机学院计算机学院WebWeb开发与安全防范开发与安全防范69l点击“在浏览器中查看”,运行后,在如下第1个文本框中输入photoID为1,然后点击“得到文件名”计算机学院计算机学院WebWeb开发与安全防范开发与安全防范702.5 任务三:建立任务三:建立Http处理程序处理程序l2.5.1 认识Http处理程序l为什么要使用HTTP处理程序?l2.5.2 建立Http处理程序计算机学院计算机学院WebWeb开发与安全防范开发与安全防范71l然后实现ProcessRequest 方法,其中调用了3个方法,分别是GetPhoto(获取照片)、GetFirstPhoto、GetPath,代码计算机学院计算机学院WebWeb开发与安全防范开发与安全防范72计算机学院计算机学院WebWeb开发与安全防范开发与安全防范73计算机学院计算机学院WebWeb开发与安全防范开发与安全防范74计算机学院计算机学院WebWeb开发与安全防范开发与安全防范752.5.3 运行运行Http处理程序处理程序l运行网站,首先显示指定photoId为31的图片,在IE中输入http:/localhost:2524/aspnet/Handler.ashx?photoId=31计算机学院计算机学院WebWeb开发与安全防范开发与安全防范76l然后指定photoId为31并且大小为小尺寸的图片,输入http:/localhost:2524/aspnet/Handler.ashx?photoId=31&size=S计算机学院计算机学院WebWeb开发与安全防范开发与安全防范77l再次显示指定photoId为33并且大小为中尺寸的图片,输入http:/localhost:2524/aspnet/Handler.ashx?photoId=33&size=M计算机学院计算机学院WebWeb开发与安全防范开发与安全防范78l最后显示相册中的第1张照片并且大小为中尺寸的图片,输入http:/localhost:2524/aspnet/Handler.ashx?AlbumID=9&size=M计算机学院计算机学院WebWeb开发与安全防范开发与安全防范792.6 任务四:页面间传值的安全任务四:页面间传值的安全防范防范l2.6.1 页面间传值的安全问题l上节中页面间传值的URLhttp:/localhost:1738/WebSite1/Handler.ashx?AlbumID=1 存在安全问题,用户可以修改查询字符串中传递的值,例如将AlbumID=1改成 AlbumID=8,这样修改甚至可以访问到没有权限的页面,要解决查询字符串的安全问题,可以使用下面介绍的加密、解密方法对查询字符串中要传递的值进行加密。计算机学院计算机学院WebWeb开发与安全防范开发与安全防范80l1 使用DESCryptoSericeProvider类来实现加密与解密功能,ESCryptoSericeProvider类的常用方法如下。l(1)DESCryptoSericeProviderCreateDecryptor方法。l该方法用指定的密钥(Key)和初始化量(IV)创建对称数据加密标准(DES)解密对象,语法如下:lPublic override IcryptoTransfrom CreateEncryptor(l Byte rgbkeyl BytergbIVl)计算机学院计算机学院WebWeb开发与安全防范开发与安全防范81l(2)DESCryptoSericeProviderCreateDecryptor方法。l该方法用指定的密钥(Key)和初始化向量(IV)创建对称数据解密标准(DES)加密对象,语法如下:lPublic override IcryptoTransfrom CreateEncryptor(l Byte rgbkeyl BytergbIVl)计算机学院计算机学院WebWeb开发与安全防范开发与安全防范82l(3)CryptoStream构造函数。l用目标数据流、要使用的转换和流的模式初始化CryptoStream类的新实型。该方法的语法如下:lPublic cryptostream(lStream stream。lIcryptoTransfrom toansform。lCryptoStreamMode model)计算机学院计算机学院WebWeb开发与安全防范开发与安全防范83l对值的加密方法计算机学院计算机学院WebWeb开发与安全防范开发与安全防范84l对值的解密方法计算机学院计算机学院WebWeb开发与安全防范开发与安全防范852.6.2 本项目的页面间传值的安本项目的页面间传值的安全解决方法全解决方法.计算机学院计算机学院WebWeb开发与安全防范开发与安全防范86l加密URL参数AlbumID值后,输入http:/localhost:1738/WebSite1/Handler.ashx?AlbumID=v9JRx0NQ0KI=计算机学院计算机学院WebWeb开发与安全防范开发与安全防范87l如果输入http:/localhost:1738/WebSite1/Handler.ashx?AlbumID=1,不能访问,有效解决了安全问题计算机学院计算机学院WebWeb开发与安全防范开发与安全防范88综合练习综合练习l1.在网页间如何传递参数及如何获得传递参数的值?l2.修改HTTP处理程序,实现通过文件名以及图片大小显示图片。l3.新建一个数据库,存放图片的路径、图片标题、拍摄日期信息。l4. 将手机拍摄的照片存放在指定目录中,利用上题建立的数据库,编写自定义HTTP处理程序,显示这些照片。计算机学院计算机学院WebWeb开发与安全防范开发与安全防范89l谢谢!计算机学院计算机学院WebWeb开发与安全防范开发与安全防范90“十二五十二五”职业教育国家规划教材(经全国职业职业教育国家规划教材(经全国职业教育教材审定委员会审定)教育教材审定委员会审定) 高等职业教育精品示范教材(信息安全系列)高等职业教育精品示范教材(信息安全系列)Web开发与安全防范开发与安全防范第第3章章 创建母版页及创建母版页及页面导航页面导航 知识目标知识目标l理解母版页的优点l页面导航的实现l理解Web.config的安全问题计算机学院计算机学院WebWeb开发与安全防范开发与安全防范93技能目标技能目标l掌握母版页的新建l在项目化教程中实现页面导航l在项目化教程中实现Web.config安全防范计算机学院计算机学院WebWeb开发与安全防范开发与安全防范94任务导航任务导航l页面的设计、管理是网站运行的一个重要方面,ASP.NET提供了母版页和页面导航技术,极大地方便了大、中型网站页面的设计、管理。l在母版页及页面导航显示相册任务中,介绍了如何使用母版页简化页面制作,并在项目化教程中使用母版页计算机学院计算机学院WebWeb开发与安全防范开发与安全防范95技能基础技能基础l3.1 条件语句l1. if语句lif语句,它有三种基本形式:单分支选择,二分支选择,多分支选择。此三种形式的用法见例2-1。计算机学院计算机学院WebWeb开发与安全防范开发与安全防范96l2. switch 语句l当程序中需要判断的分支较多时,使用 switch 语句更为直观计算机学院计算机学院WebWeb开发与安全防范开发与安全防范97l3.2 循环语句lC#提供了 4 种类型的循环语句: while 语句、 do- while 语句、 for 语句和 foreach 语句。计算机学院计算机学院WebWeb开发与安全防范开发与安全防范98l3.3 跳转结构l用于暂停执行当前代码,而去执行另一部分代码,例如break语句、continue语句、goto语句、return语句和throw语句。 计算机学院计算机学院WebWeb开发与安全防范开发与安全防范993.4 任务一:实现母版页任务一:实现母版页l3.4.1 母版页的优点l可以节省重复设计的大量时间,如果需要修改页面的头部和脚部,只需修改这个模板中的相应部分即可,非常有利于网页的制作和管理计算机学院计算机学院WebWeb开发与安全防范开发与安全防范100l3.4.2 设计母版页计算机学院计算机学院WebWeb开发与安全防范开发与安全防范101l在“解决方案资源管理器”中双击母版文件Default.master,查看该母版文件的设计视图计算机学院计算机学院WebWeb开发与安全防范开发与安全防范102l母版页Default.master的代码视图计算机学院计算机学院WebWeb开发与安全防范开发与安全防范103l2.设计母版页计算机学院计算机学院WebWeb开发与安全防范开发与安全防范104计算机学院计算机学院WebWeb开发与安全防范开发与安全防范1053.4.3 在项目中使用母版页在项目中使用母版页l1.新建Albums.aspx页面计算机学院计算机学院WebWeb开发与安全防范开发与安全防范106计算机学院计算机学院WebWeb开发与安全防范开发与安全防范107l2.新建Photos.aspx页面计算机学院计算机学院WebWeb开发与安全防范开发与安全防范108l3.新建Details.aspx页面计算机学院计算机学院WebWeb开发与安全防范开发与安全防范109l4新建Download.aspx页面计算机学院计算机学院WebWeb开发与安全防范开发与安全防范110l5 新建Admin目录下的Albums.aspx页面计算机学院计算机学院WebWeb开发与安全防范开发与安全防范111l6 新建Admin 目录下的Photos.aspx页面计算机学院计算机学院WebWeb开发与安全防范开发与安全防范112l7新建Admin目录下的Details.aspx页面计算机学院计算机学院WebWeb开发与安全防范开发与安全防范1133.5 任务二:实现页面导航任务二:实现页面导航l网站是由许许多多的页面组成的,网站中页面之间的导航,即页面之间的相互链接l3.5.1 创建站点地图文件计算机学院计算机学院WebWeb开发与安全防范开发与安全防范114l在网站中新建了8个页面计算机学院计算机学院WebWeb开发与安全防范开发与安全防范115l2.建立站点地图文件计算机学院计算机学院WebWeb开发与安全防范开发与安全防范116l站点地图文件Web.sitemap代码计算机学院计算机学院WebWeb开发与安全防范开发与安全防范117l3.5.2 使用TreeView控件实现导航计算机学院计算机学院WebWeb开发与安全防范开发与安全防范118l3.5.3 使用SiteMapPath控件显示导航路径计算机学院计算机学院WebWeb开发与安全防范开发与安全防范119l3.5.4 使用Menu控件实现导航菜单计算机学院计算机学院WebWeb开发与安全防范开发与安全防范120l3.5.5 在母版页中实现站点导航计算机学院计算机学院WebWeb开发与安全防范开发与安全防范1213.创建内容页面创建内容页面计算机学院计算机学院WebWeb开发与安全防范开发与安全防范122l3.5.6 在项目中实现页面导航l1 建立Web.sitemap计算机学院计算机学院WebWeb开发与安全防范开发与安全防范123l2 SiteMapDataSourcel单击左边控件工具箱中“数据”控件组下面的SiteMapDataSource控件,然后将其拖放到母版Default.master页面的下方即可。计算机学院计算机学院WebWeb开发与安全防范开发与安全防范124l3使用Menul单击控件工具箱中“导航”控件组下面的“Menu”控件,并将其拖放到母版Default.master页面上方的相关位置计算机学院计算机学院WebWeb开发与安全防范开发与安全防范125l4 使用SiteMapPath 计算机学院计算机学院WebWeb开发与安全防范开发与安全防范1263.6 任务三:任务三:Web.config的安的安全防御全防御lAdmin目录下用模板页新建了3个页面,只允许有管理员权限的用户访问,这个功能通过在Web.config中“”节进行控制计算机学院计算机学院WebWeb开发与安全防范开发与安全防范127l例如当运行Admin目录下的Albums.aspx页面时,系统并不会跳转到此页,而需要对用户进行身份验证计算机学院计算机学院WebWeb开发与安全防范开发与安全防范128l如果要加密一个配置节,使用SectionInformation类的ProtectSection()方法,传递想要使用的提供程序的名字来执行加密。当需要解密文件配置节时,需要调用SectionInformation类的UnProtectSection()方法l(1)ProtectSection方法lPublic void ProtectSection(string protectionProvider)l(2)UnprotectSection方法lPublic void UnprotectSection(string protectionProvider)计算机学院计算机学院WebWeb开发与安全防范开发与安全防范129l在本项目中我们如下进行加密:l在本项目中我们如下进行解密:计算机学院计算机学院WebWeb开发与安全防范开发与安全防范130l运行后的加密Web.config效果计算机学院计算机学院WebWeb开发与安全防范开发与安全防范131综合练习综合练习l1.简述“母版页”的作用,以及运用站点地图(SiteMap)技术的好处。l2.修改母版,在头部中网站的页面地址链接增加“关于”链接。l3.对修改母版页后的在第1题中的模板页中实现页面导航l4.站点地图文件是否表示真实的物理文件存储结构?请使用导航控件TreeView和SiteMap实现站点地图。计算机学院计算机学院WebWeb开发与安全防范开发与安全防范132l谢谢!计算机学院计算机学院WebWeb开发与安全防范开发与安全防范133“十二五十二五”职业教育国家规划教材(经全国职业职业教育国家规划教材(经全国职业教育教材审定委员会审定)教育教材审定委员会审定) 高等职业教育精品示范教材(信息安全系列)高等职业教育精品示范教材(信息安全系列)Web开发与安全防范开发与安全防范第第4章章 显示相册显示相册任务目标任务目标l理解ADO.NET及命名空间l掌握SqlDataSource控件用法,学会配置数据源l掌握DataList控件用法l掌握FormView控件用法l了解SQL注入攻击的原理及方法计算机学院计算机学院WebWeb开发与安全防范开发与安全防范136技能目标技能目标l显示相册信息:使用SqlDataSource、DataList控件显示每一相册中第1张照片和其他相关信息。l显示某一相册中的所有照片:使用DataList控件实现在页面中显示指定相册所包括的所有照片。l显示某张照片:学会使用FormView控件实现在页面中显示指定的照片。l针对SQL Server数据库进行SQL注入攻击,得到数据库服务器中的有效信息。计算机学院计算机学院WebWeb开发与安全防范开发与安全防范137技能基础:C#数组计算机学院计算机学院WebWeb开发与安全防范开发与安全防范138l在C中,数组类型是派生自抽象基类System.Array的引用类型,它代表一组相同类型变量的集合。l数组由一组类型相同的有序数据构成,所有数据占据一块连续的内存空间;数组名的命名要遵循标识符的命名规则。数据类型可以是任何数据类型,包括数组类型。l数组按维数可以分为一维数组、二维数组等。l数组元素的访问是通过数组下标来实现的。C数组的下标是从0开始计数的,即第一个元素对应的下标是0,以后元素逐个递增。计算机学院计算机学院WebWeb开发与安全防范开发与安全防范1394.1.1 一维数组一维数组l1、声明数组: 类型数组名; 例如:int num; /声明一个整型数组num float a,b ; /声明两个float数组a,bl 注意:l(1)int是整型数组,数组变量名放在方括号后面。l(2)数组名不可放在方括号前面。l(3)声明一个数组变量不可指定数组长度。声明一个数组变量并未给数组分配内存。计算机学院计算机学院WebWeb开发与安全防范开发与安全防范140l2、创建数组的三种方式:l(1)先声明数组,再创建数组对象。 类型 数组名; /声明数组引用 数组名=new类型元素个数;/创建数组对象 例如:int arr;arr=new int6;l(2)声明数组的同时创建数组对象。 类型 数组名=new类型 元素个数; 例如:int arr=new int6;l(3)使用new创建数组对象的同时,初始化数组所有元素。 类型 数组名=new类型 初值表; 例如: int arr=new int 1,2,3,4,5,6;计算机学院计算机学院WebWeb开发与安全防范开发与安全防范141l3. 访问数组元素l数组元素的访问必须借助数组名和元素的序号:数组名下标l在C中,数组元素的下标是从零开始的,即第一个元素的下标为0,最后的下标是数组长度减1。通常情况下,数组的下标应该是整数或整数表达式。”。l每个数组对象都有一个Length属性来表示数据的长度。计算机学院计算机学院WebWeb开发与安全防范开发与安全防范142例:求数组的最小值和最大值例:求数组的最小值和最大值public partial class testarray : System.Web.UI.Page private void Page_Load(object sender, System.EventArgs e) GetMax();/比较数字大小 void GetMax() int intList = new int 33, 55, 11, 22, 45, 16, 78, 626, 102, 21 ; string strList = ; short i; for (i = 0; i = 9; i+) strList = strList + intListi.ToString() + ,“; lblNumber.Text = strList; Array.Sort(intList); lblMinNumber.Text = intList0.ToString();/最小值 Array.Reverse(intList); /翻转数组 lblMaxNumber.Text = intList0.ToString();/最大值 计算机学院计算机学院WebWeb开发与安全防范开发与安全防范1434.1.2 多维数组多维数组l多维数组有多个下标,例如二维数组声明的语法为: 数组类型,数组名;数组类型数组名;l注意:l(1)多维数组可以在声明的时候初始化,也可以使用new关键字进行初始化。l(2)初始化时数组的每一行值都使用括号包括起来,行与行间用逗号分隔。l(3)要访问多维数组中的每个元素,只需指定它们的下标,并用逗号分隔开。 计算机学院计算机学院WebWeb开发与安全防范开发与安全防范144小结小结l掌握一维数组的声明、定义及引用l掌握数组对象的属性及方法l了解多维数组的声明及定义计算机学院计算机学院WebWeb开发与安全防范开发与安全防范145“十二五十二五”职业教育国家规划教材(经全国职业职业教育国家规划教材(经全国职业教育教材审定委员会审定)教育教材审定委员会审定) 高等职业教育精品示范教材(信息安全系列)高等职业教育精品示范教材(信息安全系列)Web开发与安全防范开发与安全防范第第4章章 显示相册显示相册任务一:使用ADO.NET操作数据库1.1 ADO.NET及命名空间及命名空间l1.ADO.NETl数据库操作、C#语言基础、常见对象、服务器控件一起组成了ASP.NET知识的四大板块l数据库管理系统(DataBase Management System,DBMS)是操纵和管理数据的大型软件,用于建立、使用和维护数据库lADO.NET是ASP.NET与数据库之间的接口lADO.NET是一个类库,利用这些类提供的对象可以完成数据库的各种操作lADO.NET共有五个常用对象,它们是Connection、Command、DataReader、DataSet和DataAdapter计算机学院计算机学院WebWeb开发与安全防范开发与安全防范148对象名称功能说明Connection提供和数据源的连接功能Command提供运行访问数据库命令,传送数据或修改数据的功能,例如运行SQL命令和存储过程等DataSet数据在内存中的表示形式。像普通数据库中的表一样DataAdapter是DataSet对象和数据源间的桥梁,DataAdapter使用4个Command对象来运行查询、新建、修改、删除的SQL命令,把数据加载到DataSet,或者把DataSet内的数据送回数据库DataReader通过Command对象运行SQL查询命令取得数据流,以便进行高速、只读的数据浏览计算机学院计算机学院WebWeb开发与安全防范开发与安全防范149lADO.NET常用对象及功能2.使用使用System.Data命名空间命名空间l使用ADO.NET的第一步是引用命名空间,其中含有所有的ADO.NET类。代码如下所示:lUsing System.Data;lADO.NET存在多种不同的数据提供者,而不同的数据提供者又对应不同的命名空间,因此在使用数据提供者时要根据不同的情况选择对应最佳的命名空间。计算机学院计算机学院WebWeb开发与安全防范开发与安全防范1503.使用使用ADO.NET数据库的访问流程数据库的访问流程lADO.NET数据库访问的一般流程如下。l建立Connection对象,创建一个数据库连接l在建立连接的基础上可以使用Command对象对数据库发送查询、新增、修改和删除等命令。l创建DataAdapter对象,从数据库中取得数据l创建DataSet对象,将DataAdapter对象填充到DataSet对象(数据集)中。l如果需要,可以重复操作,一个DataSet对象可以容纳多个数据集合。l关闭数据库。l在DataSet上进行所需要的操作,数据集的数据要输出到窗体中或者网页上面,需要设定数据显示控件的数据源为数据集。计算机学院计算机学院WebWeb开发与安全防范开发与安全防范1511.2 使用使用Connection对象连接数据库对象连接数据库l1.数据库连接概述数据库连接概述lSqlConnection对象的属性及方法计算机学院计算机学院WebWeb开发与安全防范开发与安全防范152属性及方法功 能ConnectionString读取或设置打开数据库的字符串Connection Timeout读取数据库尝试连接的秒数,默认值是15秒Data Source或Server连接打开时使用的数据库所在的服务器名称或文件夹名称Database或Initial Catalog读取或设置连接的数据库名称User ID或UidSQL Server登陆帐户(仅在使用SQL帐号登陆时设置)Password或PwdSQL Server登陆密码(仅在使用SQL帐号登陆时设置)Integrated Secutity此参数决定连接是否安全,可能的值有true、false和SSIP(true和SSIP具有相同意义)State读取当前连接状态Open( )打开数据连接Close( )关闭数据连接2.使用使用SQLConnection对象连接对象连接SQL Server数据库数据库lSqlConnection类用于建立与SQL Server服务连接,语法格式如下:l(1)直接定义SqlConnection对象con:lSqlConnection con=new SqlConnection(“Server=服务器名;User Id=用户; Pwd=密码;DataBase=数据库名称”);l(2)或者分两步完成:/先定义连接字符串step1:ConnnectionString=“Server=服务器名;User Id=用户; Pwd=密码;DataBase=数据库名称”;/再将连接字符串做为参数,定义SqlConnection对象con step2:SqlConnectin con=new SqlConnection(ConnectionString);计算机学院计算机学院WebWeb开发与安全防范开发与安全防范153l例:通过ADO.NET连接本地SQL Server中的pubs数据库:/创建连接数据库的连接字符串string ConnectionString1 = Server=(local);UserId=sa;Pwd=;DataBase=pubs;/创建SqlConnection对象SqlConnection con = new SqlConnection(ConnectionString1);/打开数据库的连接con.Open();/数据库相关操作./关闭数据库连接con.Close();计算机学院计算机学院WebWeb开发与安全防范开发与安全防范1541.3 使用使用Command对象操作接数据库对象操作接数据库lCommand对象的常用属性及说明计算机学院计算机学院WebWeb开发与安全防范开发与安全防范155属性及方法说 明CommandType获取或设置Command对象要执行命令的类型CommandText获取或设置要对数据源执行的SQL语句、存储过程名或表名CommandTimeOut获取或设置在终止对执行命令的尝试并生成错误之前的等待时间Connection获取可设置些Command对象使用的Connection对象的名称Parameters获取Command对象需要使用的参数集合ExecuteNonQuery()执行SQL语句并返回受影响的行数ExecuteReader()执行返回数据集的Select语句ExecuteScalar()执行查询,并返回查询所返回的结果集中第1行的第1列l数据库操作有两种方法使用,一种是连线方式,另外一种是离线方式。l连线方式使用DataReader对象保存数据查询结果,只能对数据库只能执行读操作,而不能进行修改、增加与删除记录等操作;l离线方式使用DataAdapter和DataSet对象,可以实现修改、增加与删除记录等操作,所以比连线方式具有更强大的功能。计算机学院计算机学院WebWeb开发与安全防范开发与安全防范156小结小结l掌握connection对象连接数据库的方法l掌握command对象操作数据库的方法计算机学院计算机学院WebWeb开发与安全防范开发与安全防范157“十二五十二五”职业教育国家规划教材(经全国职业职业教育国家规划教材(经全国职业教育教材审定委员会审定)教育教材审定委员会审定) 高等职业教育精品示范教材(信息安全系列)高等职业教育精品示范教材(信息安全系列)Web开发与安全防范开发与安全防范第第4章章 显示相册显示相册任务二:数据控件的使用目标目标l使用SqlDataSource控件连接数据源l使用DataList控件显示相册内容l使用DataList控件显示所有照片l使用FormView控件显示某张照片计算机学院计算机学院WebWeb开发与安全防范开发与安全防范1602.1 使用使用SqlDataSource连接相册数据库连接相册数据库l在VS中,封装了一些数据源控件和数据访问控件。l数据源控件允许使用不同类型的数据源,如数据库、XML文件或中间层业务对象,通过数据源控件可以连接到数据源。l数据访问控件可以绑定到数据源控件,进而绑定到数据源。通过使用这些控件完成数据库中的数据显示、编辑、添加、删除等操作。计算机学院计算机学院WebWeb开发与安全防范开发与安全防范161常见数据源控件常见数据源控件lSqlDataSource:该数据源控件功能强大,它不仅允许连接Microsoft SQL Server数据库,还可以连接OLE DB、ODBC或Oracle等形式的数据库,并且支持排序、筛选和分页等功能。lAccessDataSource:该数据源控件将Microsoft Access数据库作为数据源。lObjectDataSource:该数据源控件通过将业务对象或其他类作为数据源,可以比较容易地创建多层架构的数据管理Web应用程序。lXmlDataSource:该数据源控件将XML文件作为数据源,特别适用于分层的ASP.NET服务器控件,如Menu等导航控件。lSiteMapDataSource:该数据源控件主要与ASP.NET站点导航控件如SiteMapPath等结合使用。计算机学院计算机学院WebWeb开发与安全防范开发与安全防范162常用的数据访问控件常用的数据访问控件l(1)GridView:以表的形式显示数据,并提供对列进行排序、分页显示数据以及编辑或删除单个记录的功能。l(2)DataList:以表的形式呈现数据,通过该控件,用户可以自定义不同的模板布局来显示数据记录。l(3)DetailsView:该控件一次呈现一条表格形式的记录,并提供翻阅多条记录以及插入、更新和删除记录的功能。l(4)FormView:该控件每次呈现数据源中的一条记录,并提供翻阅多条记录以及插入、更新和删除记录的功能。l(5)Repeater:Repeater控件使用数据源返回的一组记录呈现只读列表。计算机学院计算机学院WebWeb开发与安全防范开发与安全防范163用用SqlDataSource连接数据库连接数据库l1.在Albums.aspx的视图页面中拖放SqlDataSource控件l2.选择连接数据库字符串计算机学院计算机学院WebWeb开发与安全防范开发与安全防范164l3.构造SQL语句-界面操作计算机学院计算机学院WebWeb开发与安全防范开发与安全防范165l3.构造SQL语句-输入SQL语句计算机学院计算机学院WebWeb开发与安全防范开发与安全防范166l4.测试查询计算机学院计算机学院WebWeb开发与安全防范开发与安全防范167l5. SqlDataSource数据源的设置l完成SqlDataSource的各种设置后,查看Albums.aspx页面的源代码,可以比较生成的SqlDataSource控件代码计算机学院计算机学院WebWeb开发与安全防范开发与安全防范1682.2 使用使用DataList显示相册目录显示相册目录lDataList控件以表格的形式显示数据,并且支持对数据的选择、编辑等操作。l在使用DataList控件时,必须使用DataLis控件中的项目模板(ItemTemplate)。通过项目模板,可以对DataList中的显示内容、布局和外观进行设置。计算机学院计算机学院WebWeb开发与安全防范开发与安全防范169使用使用DataList控件来显示相册内容控件来显示相册内容l1.拖放DataLis控件l将DataList控件,并将其拖放到Albums.aspx页面中,然后单击DataList右上角的智能化菜单,在“选择数据源”一项中,选择前面已经设置好的数据源控件的ID名称SqlDataSource1计算机学院计算机学院WebWeb开发与安全防范开发与安全防范170l如果运行上述页面,并不能看到数据库中的内容,为什么?计算机学院计算机学院WebWeb开发与安全防范开发与安全防范171l查看Albums.aspx页面的源代码,DataList所显示的数据内容被嵌入在.之间,要修改被显示的数据的样式,需要修改项模板之间的内容l使用视图方式,在模板中定义布局和数据源l直接修改代码计算机学院计算机学院WebWeb开发与安全防范开发与安全防范1722.3 使用使用DataList显示所有照片显示所有照片计算机学院计算机学院WebWeb开发与安全防范开发与安全防范173l1.用SqlDataSource连接数据库l(1)构造带输入参数的SQL语句l(2)输入参数测试输入的SQL语句l(3)设置SqlDataSource数据源计算机学院计算机学院WebWeb开发与安全防范开发与安全防范174l2.用DataList显示相册中的所有照片l(1)设置DataList控件属性l(2)实现DataList控件的事件程序l检查相册中是否有相片计算机学院计算机学院WebWeb开发与安全防范开发与安全防范1752.4 使用使用FormView显示某张照片显示某张照片计算机学院计算机学院WebWeb开发与安全防范开发与安全防范176l1.用SqlDataSource连接数据库l2.用FormView显示某张照片l(1)设置FormView控件属性l(2)定义FormView控件的项目模板l(3)解析Page参数计算机学院计算机学院WebWeb开发与安全防范开发与安全防范177小结小结l掌握sqldatasourse数据源控件的用法l掌握datalist控件的用法l掌握formview控件的用法计算机学院计算机学院WebWeb开发与安全防范开发与安全防范178“十二五十二五”职业教育国家规划教材(经全国职业职业教育国家规划教材(经全国职业教育教材审定委员会审定)教育教材审定委员会审定) 高等职业教育精品示范教材(信息安全系列)高等职业教育精品示范教材(信息安全系列)Web开发与安全防范开发与安全防范第第4章章 显示相册显示相册任务二:对数据库进行SQL注入攻击引入引入l在开发Web程序的过程中,不可避免的会使用数据库,而对数据库的注入攻击是Web安全领域中一种最为常见的攻击方式,注入攻击的本质,是把用户输入的数据当做代码执行,实现注入攻击需要两个条件:l第一:用用户能够控制输入l第二:原本程序要执行的代码,拼接了用户输入的数据。计算机学院计算机学院WebWeb开发与安全防范开发与安全防范1813.1 SQL注入的含义注入的含义lSQL注入攻击是指通过构造特殊的输入作为参数传入Web应用程序,而这些输入大都是SQL语法里的一些组合,通过执行SQL语句进而执行攻击者所要的操作。例:var sql=“select * from OrderTable where ShipCity= ”+ShipCity +” ”; 变量ShipCity的值由用户提交,如果输入“Beijing”,那么SQL语句如下: select * from OrderTable where ShipCity=Beijing 但假如用户输入一段有语义的SQL语句,比如: Beijing ; drop table OrdersTable- - 那么,SQL语句在实际执行时就会如下: select * from OrderTable where ShipCity= Beijing; drop table OrdersTable- -计算机学院计算机学院WebWeb开发与安全防范开发与安全防范182l原本正常执行的查询语句,变成了查询完后,再执行一个drop表的操作,而这个操作,是用户构造了恶意数据的结果。lSQL注入攻击的两个条件:l(1)用户能够控制数据的输入,比如控件变量ShipCity。l(2)原本要执行的代码,拼接了用户的输入,这个拼接过程很重要,正是这个拼接的过程导致了代码的注入。计算机学院计算机学院WebWeb开发与安全防范开发与安全防范183l注意:在SQL注入的过程中,如果网站的Web服务器开启了错误回显,则会为攻击者提供极大的便利,比如攻击者在参数中输入一个单引号“”,引起执行查询语句的语法错误,服务器直接返回了错误信息,从错误信息中就容易获得敏感信息,对于攻击者来说,构造SQL注入的语句就可以更加得心应手。计算机学院计算机学院WebWeb开发与安全防范开发与安全防范1843.2 盲注盲注l盲注:是在服务器没有错误回显时完成的注入攻击l由于服务器没有错误信息的提示,对攻击者来说缺少了非常重要的“调试信息”,所以攻击者必须找到一个方法来验证注入的SQL语句是否得到执行。计算机学院计算机学院WebWeb开发与安全防范开发与安全防范1853.3 实施实施SQL注入攻击注入攻击l1. 编写存在SQL注入漏洞的Web页面l1)创建网站及数据表,数据表用于保存用户名与密码计算机学院计算机学院WebWeb开发与安全防范开发与安全防范186l2)编写WEB页面,页面用于输入用户名与密码,需要连接数据库进行数据查询。(注意连接数据库代码及查询语句)计算机学院计算机学院WebWeb开发与安全防范开发与安全防范187l4)调试网站l如果输入数据表中已存在的用户名与密码,则能够正确显示如下结果计算机学院计算机学院WebWeb开发与安全防范开发与安全防范188l如果输入数据表中不存在,则显示如下提示信息计算机学院计算机学院WebWeb开发与安全防范开发与安全防范189l2. 发现注入漏洞l通过提交特殊字符可以尝试绕过登陆验证,比如提交“”打开和关闭数据库字符串,结束语句创建注释“-”,逻辑语句“or”等等。计算机学院计算机学院WebWeb开发与安全防范开发与安全防范1903. 防范防范SQL注入攻击注入攻击l注入攻击的漏洞产生原理是通过字符串动态的构造查询语句,为了防止SQL注入攻击,只能避免字符串查询,使用参数化的查询语句可以在代码层面上解决这一问题。l定义参数SqlParameter usernameParmameter = new SqlParameter(username,SqlDbType.NVarChar, 25);usernameParmameter.Value= this.Username.Text;l添加参数command.Parameters.Add(usernameParmameter);l修改查询语句string sqlCommand = “select * from manager where username = username and password = password”; / password使用同样的方法定义及添加计算机学院计算机学院WebWeb开发与安全防范开发与安全防范191小结小结l了解注入攻击的概念l了解盲注的概念l掌握简单的sql注入攻击的方法计算机学院计算机学院WebWeb开发与安全防范开发与安全防范192本章小结本章小结l1理解SqlDataSource控件的操作步骤。l2了解SQL语句的查询语句。l3熟练使用DataList控件进行数据源的绑定、相关属性的设置,按需求对相应模板进行定义。l4熟练使用FormView控件进行数据源的绑定、相关属性的设置,按需求对相应模板进行定义。l5 练习:l开发一个简单的学生信息管理模块,分页显示每个学生的学号、姓名、课程名、分数和班号信息,每页固定信息和条数,并显示总页数和当前页数。计算机学院计算机学院WebWeb开发与安全防范开发与安全防范193“十二五十二五”职业教育国家规划教材(经全国职业职业教育国家规划教材(经全国职业教育教材审定委员会审定)教育教材审定委员会审定) 高等职业教育精品示范教材(信息安全系列)高等职业教育精品示范教材(信息安全系列)Web开发与安全防范开发与安全防范第第5章章 管理相册管理相册任务目标任务目标l掌握DataList控件的高级应用l掌握FormView控件的高级应用l掌握GridView控件的高级应用计算机学院计算机学院WebWeb开发与安全防范开发与安全防范196技能目标技能目标lC#中类的定义l显示、添加、编辑和删除相册:使用FormView新建相册,使用GridView编辑所有相册。l新建、上传、显示、编辑和删除照片:使用FormView新建照片,使用DataList批量上传照片,使用GridView对某一指定相册中的所有照片进行管理。l了解数据库攻击的技巧及防御方法。计算机学院计算机学院WebWeb开发与安全防范开发与安全防范197技能基础:C#类基础计算机学院计算机学院WebWeb开发与安全防范开发与安全防范1981.类的定义l在C#中,可以使用class关键字定义类,创建自定义类的语法格式如下:类访问修饰符 class 类名称 :基类 ,接口列表字段声明构造函数方法事件计算机学院计算机学院WebWeb开发与安全防范开发与安全防范199l例:定义一个Person类public class Person /声明Person类 private string _name; private int _age; private long _ID; 计算机学院计算机学院WebWeb开发与安全防范开发与安全防范2002.定义字段和对象定义字段和对象l在类体中定义的变量和常量统称为类的数据成员,为了区分作用域不同的变量, C#把类一级的对象或值类型的变量称为字段(field),把在方法、事件以及构造函数内部声明的变量称为局部变量。l声明字段的一般语法形式如下:访问修饰符 数据类型 变量声明列表;l声明类之后,可以通过new关键字来创建对象: 类名 对象名 = new 类名(参数); l访问一个对象的成员时,需要使用“.”运算符。对象名.字段名 = 表达式 ; 计算机学院计算机学院WebWeb开发与安全防范开发与安全防范201小结小结l因为已有程序设计基础,所以在此讨论类的定义时只提及基本的使用方法,在ASP.NET中,每一个在设计页面中的具体控件都是对象,如无必要,不需要单独定义,对其中属性、方法及事件的使用均使用面向对象的程序设计方法。计算机学院计算机学院WebWeb开发与安全防范开发与安全防范202“十二五十二五”职业教育国家规划教材(经全国职业职业教育国家规划教材(经全国职业教育教材审定委员会审定)教育教材审定委员会审定) 高等职业教育精品示范教材(信息安全系列)高等职业教育精品示范教材(信息安全系列)Web开发与安全防范开发与安全防范第第5章章 管理相册管理相册任务一:管理相册任务描述及分析lAlbum.aspx页面的主要功能是实现相册的管理,如相册的添加,相册的标题修改,相册是否公开,浏览属性的修改,相册中照片的添加。lSqlDateSource控件来连接数据源l使用FormView控件实现添加新的相册l使用GridView控件实现相册的显示,修改和删除计算机学院计算机学院WebWeb开发与安全防范开发与安全防范205计算机学院计算机学院WebWeb开发与安全防范开发与安全防范2061.1 使用使用SqlDataSource连接相册数据库连接相册数据库l连接数据库的方式与前一章相同,在这里请大家思考,如何实施第4章的任务3中所讲的防范SQL注入攻击l拖放SqDateSource控件到相关页面l选择对应的服务器及数据库,构造连接字符串l构造SQL语句。l注意:Albums.aspx页面不仅需要显示相册的内容,还需要添加,修改,删除相册的功能,因此不仅需要SQL查询语句,还需要SQL插入、更新及删除语句。所以在SqLDateSource控件中构造SQL语句时,不仅仅像以前那样需要构造SELECT语句,还需要构造UPDATE,INSERT以及DELETE语句。计算机学院计算机学院WebWeb开发与安全防范开发与安全防范2071.2 使用使用FormView新建相册新建相册lFormView控件显示、编辑,修改及添加数据,实现这些功能,需要设置其“DefaultMode”属性,其具体含义如下:lReadOnly:该控件中所显示的数据只允许用户阅读,不允许用户修改;lEdit:该控件中的信息处于编辑,修改状态,允许用户修改其中的数据;lInsert:该控件中的数据处于添加状态,允许用户添加数据计算机学院计算机学院WebWeb开发与安全防范开发与安全防范208l将FromView控件的DefaultMode属性设置为“Insert”,使之可以在数据库中插入数据,之后并在其项目模板中设计视图,注意数据字段的绑定计算机学院计算机学院WebWeb开发与安全防范开发与安全防范209l设计好插入项目模板和后台代码之后相册管理页面如下所示,通过页面,可以新建相册。计算机学院计算机学院WebWeb开发与安全防范开发与安全防范2101.3 使用使用GridView显示并编辑相册目录显示并编辑相册目录lGridView控件无需书写代码即可实现数据表的显示,分页,编辑,删除等复杂的操作;在本例中,我们仍然使用模板来定义个性化的界面。l首先在GridView控件中连接数据库,并通过“编辑列”添加两个项目模板用于界面设计。计算机学院计算机学院WebWeb开发与安全防范开发与安全防范211l然后分别在两个模板中设置对应的itemTemplete及EditItemTemplete选项计算机学院计算机学院WebWeb开发与安全防范开发与安全防范212l设置完成之后的界面如下所示计算机学院计算机学院WebWeb开发与安全防范开发与安全防范213小结小结l掌握formview的用法l掌握gridview的用法计算机学院计算机学院WebWeb开发与安全防范开发与安全防范214“十二五十二五”职业教育国家规划教材(经全国职业职业教育国家规划教材(经全国职业教育教材审定委员会审定)教育教材审定委员会审定) 高等职业教育精品示范教材(信息安全系列)高等职业教育精品示范教材(信息安全系列)Web开发与安全防范开发与安全防范第第5章章 管理相册管理相册任务二:管理照片任务描述及分析l在Photos.aspx页面中,需要实现某一相册中所有照片的管理,包括单张照片的添加、照片标题的更改、照片的删除以及照片的批量上传等功能。l使用FormView控件来实现照片的添加;l编写ADO.NET数据访问代码,使用Datalist控件实现照片批量上传;l使用GridView控件实现照片的显示、修改、以及删除。计算机学院计算机学院WebWeb开发与安全防范开发与安全防范217计算机学院计算机学院WebWeb开发与安全防范开发与安全防范2181 使用使用FormView新建相片新建相片l1.用SqlDataSource连接数据库(同前)l2.使用FormView新建相册中的照片l使用FormView控件实现添加数据功能,必须设置“DefaultMode”的属性为insert,并在插入“插入项目模板(InsertItemTemplate)”中定义需要的用户界面。该模板中加入了一个FileUpLoad控件用于将本地图上传。计算机学院计算机学院WebWeb开发与安全防范开发与安全防范219l在SqlDataSource设置的插入语句中,设置了6个输入参数:AlbumID、OriginalFileName、Caption、LargeFileName、MediumFileName以及SmallFileName。其中AlbumID通过页面参数传递来实现;OriginalFileName、Caption通过在FormView控件中的代码进行双向绑定来获得输入。计算机学院计算机学院WebWeb开发与安全防范开发与安全防范220l将FromView控件的DefaultMode属性设置为“Insert”,使之可以在数据库中插入数据,之后并在其项目模板中设计视图,注意数据字段的绑定计算机学院计算机学院WebWeb开发与安全防范开发与安全防范221l设计好插入项目模板和后台代码之后相册管理页面如下所示,通过页面,可以新建相册。计算机学院计算机学院WebWeb开发与安全防范开发与安全防范2222 使用使用DataList批量上传照片批量上传照片l批量上传的功能是将Upload文件夹中的照片一次性上传到当前相册,使用DataList控件来实现,包括显示上传的照片的文件名称,具体设置:l“RepeatLayout属性”设置为Table,表示以表格的形式显示数据l“RepeatColumns属性”设置为1,表示列数为1,即每行只显示一条数据记录,l显示的数据通过语句块项目模板.来定义,这里使用了Container.DataIterm来显示数据源中的所有记录。计算机学院计算机学院WebWeb开发与安全防范开发与安全防范2233 使用使用GridView实现照片的显示、更改和删除实现照片的显示、更改和删除lGridView设置了两个编辑项目模板l一个用于显示相册中的每一张照片,照片显示在一个3行3列的中间单元格中,四周形成一个画框。一个用于显示两个编辑按钮,点击“rename”按钮,可以更改该张照片的标题,单机“delete”按钮,可以删除照片。计算机学院计算机学院WebWeb开发与安全防范开发与安全防范224小结小结l进一步了解formview及gridview的用法计算机学院计算机学院WebWeb开发与安全防范开发与安全防范225“十二五十二五”职业教育国家规划教材(经全国职业职业教育国家规划教材(经全国职业教育教材审定委员会审定)教育教材审定委员会审定) 高等职业教育精品示范教材(信息安全系列)高等职业教育精品示范教材(信息安全系列)Web开发与安全防范开发与安全防范第第5章章 管理相册管理相册任务三:数据库攻击技巧及防御方法任务描述及分析l了解针对不同的数据库,SQL注入的不同技巧。l了解对于不同数据库注入问题,如何防范。计算机学院计算机学院WebWeb开发与安全防范开发与安全防范2281 数据库攻击技巧数据库攻击技巧l1.常见的攻击技巧l针对不同的数据库系统,可以使用不同的方法进行数据库攻击,如注入攻击,自动化工具,函数,存储过程攻击等l2.攻击存储过程l在SQL Server中,“xp_cmshell”是最常被用到的一个注入SQL Server的存储过程,比如,用它可以执行以下系统命令:EXEC master.dbo.xp_cmdshell cmd.exe dir c:EXEC master.dbo.xp_cmdshell ping计算机学院计算机学院WebWeb开发与安全防范开发与安全防范2292 正确的防御正确的防御SQL注入注入l从防御的角度来看,要用的事情分两步完成:l找到所有的SQL注入漏洞l修补这些漏洞l具体方法l1使用预编译语句l2使用存储过程l3检查数据类型l4使用安全函数计算机学院计算机学院WebWeb开发与安全防范开发与安全防范230小结小结l了解SQL注入的不同技巧。l了解防范注入攻击的方法计算机学院计算机学院WebWeb开发与安全防范开发与安全防范231单元小结单元小结l更进一步了解datalist,formview,girdview这几咱数据控件的用法。l对于注入攻击,了解其技巧及防范方法。l课外练习 l1.使用GridView控件编写学生通讯录管理系统,要求实现录入、删除、查询、排序和显示五项功能。计算机学院计算机学院WebWeb开发与安全防范开发与安全防范232“十二五十二五”职业教育国家规划教材(经全国职业职业教育国家规划教材(经全国职业教育教材审定委员会审定)教育教材审定委员会审定) 高等职业教育精品示范教材(信息安全系列)高等职业教育精品示范教材(信息安全系列)Web开发与安全防范开发与安全防范第第6章章 设置主题和皮肤设置主题和皮肤 知识目标知识目标 l掌握主题的涵义。l掌握皮肤文件的格式。l了解主题与样式的区别。计算机学院计算机学院WebWeb开发与安全防范开发与安全防范235技能目标技能目标l掌握主题的创建方法。l掌握皮肤文件的创建方法。l掌握主题的应用方法。计算机学院计算机学院WebWeb开发与安全防范开发与安全防范236技能基础技能基础l6.1 属性的定义和访问l属性是一种用于访问对象的特性的成员,在引用方式上与字段有些相似。但字段只能用来表示存储在对象内部的数据,直接访问字段可能会破坏数据的封装性;而属性不表示存储位置,属性的定义是通过get访问器和set访问器来完成的,无论是读取属性值还是设置属性值,都需要先经过访问器进行处理,从而避免了对字段的直接访问,实现了良好的安全性和灵活性。计算机学院计算机学院WebWeb开发与安全防范开发与安全防范237l1. 属性的定义l声明属性的一般语法形式如下:l访问修饰符 数据类型 属性名llget /读取属性值的访问器ll/可执行代码lreturn ;llset /设置属性值的访问器ll/可执行代码l/表达式(可以使用关键字 value)ll计算机学院计算机学院WebWeb开发与安全防范开发与安全防范238l2. 访问器与属性的读写操作 l在属性定义中使用了两种访问器,其中 get 访问器用于读取属性值, set 访问器用于设置属性值,所有的属性定义代码都必须书写在访问器之内。l如果属性定义中只包含get访问器,该属性就成为只读属性,如果企图对其执行写操作,就会导致错误。l如果属性定义中只包含set访问器,该属性就成为只写属性,不能对其执行读操作。 计算机学院计算机学院WebWeb开发与安全防范开发与安全防范239l3. 静态属性l如果在属性声明时使用了 static 修饰符,这个属性就成为静态属性,否则就是实例属性。静态属性只能访问类的静态成员 l4. 属性的访问l属性成员的访问与公有字段成员的访问一样,程序员可以为只写属性赋值,也可以读取可读属性的值。计算机学院计算机学院WebWeb开发与安全防范开发与安全防范240l6.2 方法的定义和调用l人一般都具有工作、学习、睡觉、说话等行为,通过这些行为,人能够与外界打交道,外界也能够通过这些行为改变人的状态。在C#中,这些行为可以用类的方法来实现。l1. 方法的定义l在类中定义“方法”的语法格式如下:l方法修饰符 返回类型 方法名(形参列表) 方法体 计算机学院计算机学院WebWeb开发与安全防范开发与安全防范241l2. 方法的调用l程序中调用指定对象的方法时,语句格式如下:l对象名.方法名(实际参数表);l方法被调用时,按照实际参数表中各参数的顺序,依次将实际参数传递给对应的形式参数,二者的数据类型必须保持一致。然后执行方法中的语句序列,并在遇到 return 语句时,或执行完语句序列中的所有语句之后,返回调用此方法的程序代码段,同时返回一个值(注意,只能返回一个值)。方法中可以有多条 return 语句,但只有一条会执行。计算机学院计算机学院WebWeb开发与安全防范开发与安全防范242l3. 方法的参数 l方法的参数包括:值参数、引用参数、输出参数和参数数组。 l(1)值参数 l在参数声明时,若没有任何修饰符,则默认为值参数,值参数顾名思义,是用来传递值的。在按值传递过程中,实际参数和形式参数各自占用不同的内存空间,只把实际参数的值复制给对应的形式参数,因此在方法中的代码执行期间形式参数值的改变对实际参数无任何影响。 计算机学院计算机学院WebWeb开发与安全防范开发与安全防范243l例6-1:值参数的传递lvoid Swap(int a , int b ) l l int t; l t = a; a = b; b = t; l l调用Swap方法: lmain()li nt x=10, y=20; lSwap(x, y); l函数Swap有两个值参数a和b,在函数内交换了a和b的值并不影响实参x和y的值。 计算机学院计算机学院WebWeb开发与安全防范开发与安全防范244l(2)引用参数 l若参数声明时使用ref 修饰符,则定义为引用参数,应用参数传递的是地址。在按引用传递过程中,实际参数和形式参数使用的是相同的内存单元,如果在方法代码执行期间形式参数值发生了改变,实际参数的值就会发生相同的改变。 l在通常情况下,方法只能有一个返回值,但在实际应用中,有时需要返回多个值,或者希望在方法调用期间修改实际参数值,此时可以采用“按引用传递”方式。计算机学院计算机学院WebWeb开发与安全防范开发与安全防范245l例6-2: 引用参数的传递lvoid Swap(ref int a , ref int b ) l int t; l t = a; a = b; b = t; l l调用Swap方法: lmain()lint x =10, y = 20; l Swap(ref x , ref y); ll函数Swap有两个引用参数a和b,在函数内交换a和b的值同时也交换了实参x和y的值。 l 注解: 使用引用参数时,形参和实参前都必须加上ref关键字;在函数调用前,引用参数必须被初始化 计算机学院计算机学院WebWeb开发与安全防范开发与安全防范246l(3)输出参数l用out修饰符声明的参数称为输出参数。如果希望函数返回多个值,可使用输出参数。l输出参数与引用参数类似,参数也是通过引用来传递的,这样当在函数内为输出参数赋值时,就相当于给实参赋值。计算机学院计算机学院WebWeb开发与安全防范开发与安全防范247l例6-3,输出参数的传递 lint OutMultiValue(int a , out char b) l b = (char) a; l return 0; l调用OutM ultiValue方法: lmain()lint t = 65 , r; lchar m; l r = OutMultiValue(t ,out m); ll利用输出参数使OutMultiValue函数返回了两个值。 l 注解: 使用输出参数时,形参和实参前都必须加上out关键字;实参在使用前,不必进行初始化,但在函数内部必须为输出参数赋值。 248l4. 参数数组l用params修饰符声明的变量称为参数数组,它允许向函数传递个数变化的参数。调用方可以传递一个属同一类型的数组变量,或任意多个与该数组的元素属同一类型的自变量。除了允许在调用中使用可变数量的参数,参数数组与同一类型的值参数完全等效。计算机学院计算机学院WebWeb开发与安全防范开发与安全防范249l例6-4参数数组的传递: l int MultiParams(params int var) l int sum = 0; l for(int i= 0 ;i var.Length ; i +) l sum += vari; l return sum; l调用M ultiParams方法: lmain()lint arr = 10 , 20 ,30 , sum1, sum2, sum3; lsum1 = MutiParams( arr ); /有3个参数,参数为一维数组 lsum2 = MutiParams(100, 200 ); /有2个参数 l sum3 = MutiParams(); /没有参数 l利用参数数组使得MultiParams函数可以接收数目不定的参数。 l 注解: 参数数组必须是形参列表中的最后一个参数;一个方法中,只能有一个参数数组;参数数组只能是一维数组类型。例如,类型 string。不能将params修饰符与ref和out修饰符组合起来2506.3 任务一:新建主题和皮肤任务一:新建主题和皮肤l为了使得网站中的页面具有统一的风格和外观,ASP.NET提供了主题和皮肤来美化、设定网站的页面。主题代表网页和控件的一套样式设置,一个web应用程序可以包含多个主题,每个主题是ASP.net的专用目录App_Themes文件夹下的一个子文件夹,其中只允许包含3种类型的文件:皮肤文件(*.skin)、样式表文件(*.css)和各类图像文件。计算机学院计算机学院WebWeb开发与安全防范开发与安全防范2516.3.1新建主题新建主题l在一个项目中使用主题,首先需要在项目中创建App_Themes文件夹 ,并在App_Themes文件夹中创建与主题名称相同的文件夹,然后在这个主题文件夹中创建样式、皮肤等文件,最后才可以使用主题。l(1)创建App_Themes文件夹 计算机学院计算机学院WebWeb开发与安全防范开发与安全防范252图6-1 TreeView控件示例l(2)创建主题文件夹l选中App_Themes文件夹,按鼠标右键,选择“添加ASP.NET文件夹”“主题”命令,将建立主题文件夹,将主题文件夹重命名为自己的主题名,此处命名为TestTheme1。 计算机学院计算机学院WebWeb开发与安全防范开发与安全防范253图6-2 创建主题6.3.2创建主题文件创建主题文件l在主题文件夹下,可以添加相关的样式文件,比如样式表、外观文件(也叫皮肤)以及其他资源文件如图片文件等。 l(1)创建资源文件l 在TestTheme1主题文件夹中新建Images文件夹,放置一个图片文件在该文件夹中,此处放button001.jpg图片作为ImageButton控件的图片源。计算机学院计算机学院WebWeb开发与安全防范开发与安全防范254图6-3 创建皮肤文件l(2)新建皮肤文件l1)选择新建的主题文件夹TestTheme1,按鼠标右键,在弹出的快捷菜单中选择“添加新项”。l2)在弹出的“添加新项”对话框中选择“外观文件”,如图6-3所示,命名为SkinTest.skin。此时建立了一个空白的皮肤文件。l3)打开SkinTest.skin文件,在皮肤文件中对前文test.aspx页面中的控件样式进行定义,源代码如下:计算机学院计算机学院WebWeb开发与安全防范开发与安全防范255llllll lllllll l 2566.3.3应用主题应用主题l(1)在单个网页中应用主题(页面主题)l在aspx页面的顶部的Page指令添加属性Theme=主题名或StyleTheme=主题名。StylesheetTheme和Theme的区别:lTheme表示强制复制本地属性,针对默认的样式(没有定义SkinID的样式),在相应的aspx页面中Theme将采用定义的样式,在页面里再设计同属性的样式无效;StylesheetTheme则表示主题为本地控件的从属设置,允许在页面里再定义同属性的样式并有效,主题控件中同属性的样式无效。(注意:是同属性的样式,比如同是定义Height)。计算机学院计算机学院WebWeb开发与安全防范开发与安全防范257l(2)对网站应用主题(全局主题)l需要设置Web.config文件,在Web.config中的中添加或,这样在整个应用中都会自动应用名为“主题名”的主题。代码如下:lllll计算机学院计算机学院WebWeb开发与安全防范开发与安全防范258l(3)禁用主题l直接将页面或控件的EnableTheming属性设置为False,实现禁止该网页或控件使用主题。 计算机学院计算机学院WebWeb开发与安全防范开发与安全防范259图6-4 默认外观效果图6-5 使用命名的外观6.4 任务二:在项目中使用主题任务二:在项目中使用主题l6.4.1创建主题l(1)创建App_Themes文件夹l在Visual Studio 2005中,右键单击“解决方案资源管理器”窗格中的“chap06”项目,在弹出的快捷菜单中,选择“添加ASP.NET文件夹”命令,在弹出的子菜单中选择“主题”|添加ASP.NET文件夹命令,新建一个App_Themes文件夹。计算机学院计算机学院WebWeb开发与安全防范开发与安全防范260l(2)创建主题文件夹l在创建App_Themes文件夹的同时,在该文件夹中自动创建了一个名为“主题1”的文件夹,该文件夹为主题文件夹,选择“主题1”,按鼠标右键进行重命名为“White”;然后选中App_Themes文件夹,按鼠标右键,选择“添加ASP.NET文件夹”“主题”命令,将建立主题文件夹,将主题文件夹重命名为自己的主题名“Black”。计算机学院计算机学院WebWeb开发与安全防范开发与安全防范261l(3)设计主题文件l在主题目录下,可以添加相关的样式文件,比如样式表、外观文件(也叫皮肤)以及其他资源文件如图片文件等。l此处将事先定义好的样式文件Default.css和Frame.css,以及与样式文件相关的图片资源文件,添加到主题文件中,即文件夹White和Black中。创建好的主题目录结构如图6-6:计算机学院计算机学院WebWeb开发与安全防范开发与安全防范262图6-6主题目录结构6.4.2使用主题l本章的主题是应用于整个网站,因此采取通过Web.config文件来使用主题,在网站的根目录下找到Web.config,若不存在则新建Web.config文件,在该文件的中添加,整个网站就可以使用White的主题。在Web.config中使用主题的代码如下:计算机学院计算机学院WebWeb开发与安全防范开发与安全防范263l6.5 任务三:在项目中实现皮肤设置l皮肤主要用来定义控件的样式以及外观,在Visual Studio 2005中,可以将需要使用的控件样式及外观集中定义在一个扩展名为.skin的皮肤文件中,并为每个定义好的控件设置一个SkinId属性,这样在设计页面时,可以通过设置控件的SkinId属性来来使用预先定义好的外观。 计算机学院计算机学院WebWeb开发与安全防范开发与安全防范264l6.5.1创建皮肤l(1)创建皮肤文件l在Visual Studio 2005中,右键单击“解决方案资源管理器”窗格中的“Black”文件夹,按鼠标右键,在弹出的快捷菜单中选择“添加新项”菜单,在弹出的“添加新项”对话框中选择“外观文件”模板,输入皮肤文件名为Default.skin,此时建立了一个空白的皮肤文件。采用同样的方法也在“White”主题下新建一个名为Default.skin的皮肤文件。计算机学院计算机学院WebWeb开发与安全防范开发与安全防范265l(2)设置皮肤l在设置皮肤时,在各个主题下相对应的皮肤文件的结构要一致,比如Black主题下的Default.skin皮肤文件中定义了一个Image控件的SkinId为gallery,则在White主题下的Default.skin皮肤文件中也要定义一个Image控件的SkinId为gallery。计算机学院计算机学院WebWeb开发与安全防范开发与安全防范266计算机学院计算机学院WebWeb开发与安全防范开发与安全防范2671:2:3:4:6:6:8:9:10:11:12:13:14:15:16:16:18:19:20:21:22:23:24:25:26:26:28:29:30:31:33:34:35:36:图 6-7 设 置SkinId6.5.2使用皮肤l在Visual Studio 2005中,当某个控件要使用皮肤时,可以通过设置其SkinId属性与相应的外观文件建立链接,在设置SkinId属性时,可以通过在控件的属性框中,单击SkinId右侧将会弹出下拉列表框,可以在该框中选择需要的SkinId,如图6-7所示。l1.Albums.aspx页面 l在Albums.aspx页面中数据访问控件DataList使用皮肤的代码如下: 计算机学院计算机学院WebWeb开发与安全防范开发与安全防范2682691:4: 5: 6: 6: 8: 9: 10: 11: 12: 13: 14: 15: 16: a href=Photos.aspx?AlbumID= img src=Handler.ashx?AlbumID=&Size=M photo_198 border:4px solid white alt=示例照片,相册编号 /16: 18: 19: 20: 21: 22: 23: 24: 25: 26: 26: 28: 29: 30: 31: 32: 33: 34: 35:a href=Photos.aspx?AlbumID=36: 张照片38: 39: 图6-8 Albums界面l2.Photos.aspx页面l在Photos.aspx页面中,数据访问控件DataList的上方及下方的Albums.aspx页面的链接地址使用皮肤的代码如下: 计算机学院计算机学院WebWeb开发与安全防范开发与安全防范2702711: 2:3: 4: 5:6:9:10:11:12:13:14:15:16:a href=Details.aspx?AlbumID=&Page=18:img src=Handler.ashx?PhotoID=&Size=S photo_198 19:border:4px solid white alt=缩略图,照片编号 /20:21:22:23:24:25:26:26: 28:29: 30: 31:32:33:此相册当34:前没有任何图片。35:36:36:38:l3.Details.aspx页面l在Details.aspx页面中,数据访问控件FormView中的照片浏览按钮使用皮肤的代码如下:计算机学院计算机学院WebWeb开发与安全防范开发与安全防范2722731:2:3:6:6:8: 10:12:14:16:18:19:20:21:22:23: 24: 25:26:26:28:img src=Handler.ashx?PhotoID=&Size=L 29:photo_198 border:4px solid white alt=照片编号 30:/31:32:33:34: 35: 36:36:38:39:a href=Download.aspx?AlbumID=&Page=41: 43:44:46:    46:49: 51:53:55:56:56:58:l通过Web.config文件,可以十分方便地设置并改变整个网站的主题,前文所使用的主题均为White,在Web.config文件中,将l代码改为l l则整个网站的主题就变成了Black主题。如下图6-11主题为“Black”时Photos.aspx的运行界面。 计算机学院计算机学院WebWeb开发与安全防范开发与安全防范2746.6 任务四:任务四:HML跨站脚本安全跨站脚本安全分析分析l6.6.1跨站脚本介绍l 随着Web技术的蓬勃发展,XSS跨站脚本无疑已经成为最流行和影响严重的Web安全漏洞,网络上研究跨站脚本技术的人也逐渐多起来,从而催化了相关技术文章的大量涌现,但是,虽然人们已经开始关注XSS,却依然无法改变它的到处泛滥的事实,这完全归结为XSS的独特之处。l 跨站脚本(Cross-Site Scripting, XSS)是一种经常出现在Web应用程序中的安全漏洞,是由于Web应用程序对用户的输入过滤不足而产生的,攻击者利用网站漏洞把恶意脚本代码(HTML代码或客户端Javascript脚本)注入到网页中,当其他用户浏览访问这些网站时,就会执行其中的恶意代码,对受害者用户可能被盗取Cookie资料、会话劫持、钓鱼欺骗等各种攻击活动。275l通常情况下,我们既可以把跨站脚本理解成一种Web安全漏洞,也可以理解成一种攻击手段。XSS跨站脚本攻击本身对WEB服务器没有直接的危害,它借助网站进行传播,使网站的大量用户受到攻击,攻击者一般通过留言、电子邮件或其他途径向受害者发送一个精心构造的恶意URL,当受害者在Web浏览器中打开URL的时候,恶意脚本会在受害者的计算机上悄悄执行,流程如图 2766.6.2造成跨站攻击的流行因素分造成跨站攻击的流行因素分析析l(1)Web浏览器本身的设计是不安全的,浏览器包含了解析和执行JavaScript等脚本语言的能力,这些语言用来创建各种歌手丰富的功能,而浏览器只会执行,不会判断数据和程序代码是否恶意。l(2)输入与输出是Web应用程序最基本的交互,一切输入都是有害的,在这过程中若没做好安全防护,Web程序很容易会出现XSS漏洞。l(3)现在应用程序大部分是通过团队合作完成的,程序员之间的水平参差不齐,很少有人受过正规的安全培训,因此,开发出来的产品难免存在问题。计算机学院计算机学院WebWeb开发与安全防范开发与安全防范277l(4)不管是开发人员还是安全工程师,很多都没有真正意识到XSS漏洞的危害,导致这类漏洞普遍受到忽视。很多企业甚至缺乏专门的安全工程师,或不愿在安全问题上花更多的时间和金钱l(5)触发跨站脚本的方式非常简单,只要向HTML代码中注入脚本即可,而且执行此类攻击的手段众多,譬如CSS、Flash等。XSS技术的运用如此灵活多变,要做到完全防御是一件相当困难的事情。l(6)随着Web2.0的流行,网上交互功能越来越丰富,Web2.0鼓励信息分享与交互,这样用户就有了更多的机会去查看和修改他人的信息,比如通过论坛、Blog或社交网站,于是黑客就有了更广阔的空间发动XSS攻击。 2786.6.3用户安全输入用户安全输入l(1)定义输入l输入就是从外部进入程序中的任何数据,它可以有多种来源,包括被用户提交的表单、从数据库中读取(或从Web服务中检索)的数据、浏览器发送的头文件或从Web服务器读取的文件。所有这些类型的数据都可以由应用程序处理,并且确定了应用程序如何处理和输出类容。l所有的输入都是不安全的,除非有足够的证据证明它是安全的,在决定输入是否安全方面有一个通用的概念信任边界,信任边界可以认为是应用程序中的一个边界或者是在应用程序中画的一条线。边界一侧的数据是不受信任的,另一侧的数据假设是安全的,验证和净化逻辑的任务是把数据从不信任的一侧安全地转移到信任一侧,如图6-13显示了系统内外的信任边界 279计算机学院计算机学院WebWeb开发与安全防范开发与安全防范2806.6.4 跨站攻击的危害分析跨站攻击的危害分析lXSS攻击手段大致分为两种,一种是反射型XSS,就是发出请求时,XSS代码出现在URL中,作为输入提交到服务器,服务端解析后响应,在响应内容中出现这段XSS代码,最后浏览器解析执行,这个过程好像一次反射,所以称为反射型XSS,本文的任务实施里将详细介绍此类攻击及防范。还有一种是存储型XSS,当JS被注入到HTML中后JS代码会被存储到数据库中,下次浏览被攻击页面时会自动调用数据库里的这段JS代码,不必重新注入了,此方法的隐蔽性较高。 l听起来好像XSS不会直接危害到服务器的安全,但是也可以被众多非法用途所利用:l(1)窃取账户或服务:会话标示符通常存储在用户的浏览器的cookie中,可以通过javascript操作查看cookie值,攻击者可以利用XSS将受害者的cookie值发送到另外的站点获取cookie,如果此cookie是某个网站用户或管理员的cookie,我们就可以利用盗取的cookie欺骗登陆某个网站用户或管理员。l(2)钓鱼攻击:利用XSS漏洞攻击者向漏洞页面插入恶意JS代码,这段代码可能会将浏览器重定向到另外的页面,这个页面也许会是一个恶意的钓鱼页面,还可以在漏洞页面里插入恶意js代码覆盖当前正常页面等,当用户按照提示输入相关的账号及密码后就会被记录下来发送到指定的服务器。l(3)挂马:跟钓鱼攻击类似,不过重定向后的网站是一个利用了浏览器内核溢出漏洞的网站,当受害者浏览此网站后将会触发溢出漏洞自动下载并执行恶意程序。l(4)DOS/DDOS攻击:拒绝服务攻击,利用大量数据包淹没目标主机的资源,使目标主机无法对合法用户做出相应。l(5)XSS蠕虫:目标Web2.0网站存在XSS漏洞,当受害者查看存在XSS蠕虫代码内容时,蠕虫触发并开始感染传播。l网络钓鱼的攻击者到底是如何实施钓鱼攻击的?下面来具体介绍几种攻击方案。l1)钓鱼页面l既然要钓鱼那么受害者必须在攻击者指定的页面下输入信息并提交给攻击者了才能获取到信息,这个页面当然是攻击者自己伪造的了,一般钓鱼网页的主要内容是登陆表单部分,其代码可以从真实的网站复制过去,比如下面的HTML代码:lusernamellusername:lpassword:llll其中action后面是登陆表单的地址,根据实际情况修改,这里我们远程WEB服务器192.168.1.126里有接受信息的页面get.php,就要改变标签中的action的值,如:ll2)记录信息的脚本l在远程服务器(http:/192.168.1.126)上,会存放一个用来接收和记录账号和密码信息的程序文件,就是上面我们提到的get.php,代码如下:ll这段代码用来接收用户输入的账号(username)和密码(password)信息,并保存在logfile.txt中,然后用PHP的header()函数实现跳转,让页面访问正常网站。 l3)XSS Phishing Expliot。l攻击者在XSS页面插入利用代码:lhttp:/192.168.1.107:8046/Default.aspx?cid=l当用户访问这个链接时,就会动态调用远程new.js文件,这个文件的作用就是创建一个iframe框架覆盖目标页面,再加载远程域伪造的钓鱼页面(phishing.html)。l这里的new.js的方法如下:ldocument.body.innerHTML=(l+ );l当受害者打开了我们的XSS Phishing Expliot后会被我们的钓鱼页面(Phishing.html)覆盖,如图所示; l以上页面提示我们输入用户名与密码后才能登陆网站,似乎是一个验证登陆的过程,实际上是攻击者伪造的一个钓鱼页面,当用户输入相关信息后,用户的用户名与密码将会记录到攻击者的远程服务器上,如图6-15,6-16所示; l可以看到远程服务器里的get.php已经记录下了受害者的账号与密码。l以上,就是一个利用XSS技术实施的钓鱼欺骗攻击的简单示例。l下面我们来讨论几种比较常见的XSS钓鱼方式lXSS重定向钓鱼(XSS Redirect Phishing)l这种方法是把当前的页面重定向到我们的钓鱼页面上去,假如www.abc.com为漏洞网站,那么钓鱼网站www.def.com就完全仿冒正常网站页面内容及行为,开始钓鱼诈骗活动。l环境中http:/192.168.1.107:8046/Default.aspx上有XSS漏洞:lhttp:/192.168.1.107:8046/Default.aspx?cid=Expliotl那么Expliot如下:lhttp:/192.168.1.107:8046/Default.aspx?cid=”document.location.href=”http:/192.168.1.126/phishing.html”l这样便会让用户从当前访问的网站跳转到一个邪恶的钓鱼网站,如图6-17所示 lXSS跨框架钓鱼l这种方式是通过标签嵌入远程域的一个页面实施钓鱼,和本节第一个钓鱼示例是类似的,同样是利用iframe引用第三方的内容伪造登陆控件,此时主页面依然处在正常网站域名下,因此具有很高的迷惑性。l那么,XSS Phishing Exploit如下:l192.168.1.107:8046/Default.aspx?cid=l跳转后的界面如图6-18所示: l网页挂马l远程控制、C/S聊天程序盗号软件,各种潜伏在系统里的间谍、后门程序,至今还在威胁着用户及企业的信息安全,木马就是这类程序中的一员,将木马与网页相结合即为网页木马,网页木马充分利用了浏览器的内核漏洞进行溢出攻击,这在IE浏览器中最为常见,如果木马与浏览器Expliot相结合,在执行溢出的过程中就会下载远程的木马程序并自动执行了,这个过程对于用户来说是透明的,基本上毫无察觉。综合练习综合练习l1.创建一个主题皮肤文件,包含对按钮、文本框、标签等元素的设置,设计用户登录界面,界面中包含用户名、密码、登录、取消等控件元素,使用外观文件来统一页面风格。l2.完成新闻发布系统主题设计。l谢谢!“十二五十二五”职业教育国家规划教材(经全国职业职业教育国家规划教材(经全国职业教育教材审定委员会审定)教育教材审定委员会审定) 高等职业教育精品示范教材(信息安全系列)高等职业教育精品示范教材(信息安全系列)Web开发与安全防范开发与安全防范第第7章章 成员与角色管理成员与角色管理 知识目标知识目标 l掌握成员管理的方法l掌握角色管理的方法l掌握在项目中实现成员与角色管理的方法l掌握成员与角色的安全防御计算机学院计算机学院WebWeb开发与安全防范开发与安全防范294技能目标技能目标lCreateUserWizard控件的使用lLogin LoginStatus、LoginName控件的使用lLoginView控件的使用l在项目中实现成员与角色管理l在项目中进行成员与角色的安全防御计算机学院计算机学院WebWeb开发与安全防范开发与安全防范295技能基础技能基础l7.1 文件管理l1. File 类和 FileInfo类lFile 类和 FileInfo 类对文件创建、复制、删除、移动和打开等操作 计算机学院计算机学院WebWeb开发与安全防范开发与安全防范296方法说明返回值类型Copy()将指定文件从源位置复制到目标位置,允许覆盖重名文件voidCreate()在指定的路径下创建文件FileStreamDelete()删除指定的文件voidExists()判断指定的文件是否存在boolMove()将指定的文件移动到新的位置voidOpen()打开指定路径下的FileStream对象FileStreaml2. 获取文件的属性l声明如下:public static FileAttributes GetAttributes(string path);方法返回参数指定的文件的FileAttributes,如果未找到路径或文件,返回-1 。 计算机学院计算机学院WebWeb开发与安全防范开发与安全防范297l3. 复制文件 l方法:public static void Copy(string sFName,string dFName,bool overW); 该方法将参数sFName指定文件拷贝到参数destFileName指定的目录,修改文件名为参数dFName指定的文件名 计算机学院计算机学院WebWeb开发与安全防范开发与安全防范298l4. 删除文件l方法:public static void Delete(string path);该方法删除参数指定的文件,参数path指定要删除的文件的路径 。 计算机学院计算机学院WebWeb开发与安全防范开发与安全防范2997.2 目录和路径管理目录和路径管理lDirectory 类的常用静态方法如表 计算机学院计算机学院WebWeb开发与安全防范开发与安全防范300方法说明返回值类型CreateDirectory() 创建目录 DictionaryInfoDelete() 删除目录 voidGetDirectories()获取指定目录下的子目录名称 stringGetDirectoryRoot() 获取指定目录的根目录 stringGetFiles() 获取指定目录下的文件名 stringGetFilesSystemEntries() 获取指定目录下的所有文件名和子目录名称 stringMove() 将文件或目录及其内容移到指定位置 voidl1. 创建目录l方法:public static DirectoryInfo CreateDirectory(string path);方法按参数path指定的路径创建所有目录及其子目录。 计算机学院计算机学院WebWeb开发与安全防范开发与安全防范301l2. 删除目录l方法:public static void Delete(string path,bool recursive);该方法删除参数path指定的目录。方法的第二个参数为bool类型,为true可以删除非空目录;若为false,则仅当目录为空时才可删除。 计算机学院计算机学院WebWeb开发与安全防范开发与安全防范302l3. 移动目录l方法:public static void Move(string sourceDirName,string destDirName);该方法将文件或目录及其子目录移到新位置 计算机学院计算机学院WebWeb开发与安全防范开发与安全防范303l4. 获取当前目录下所有子目录l 该方法声明如下:public static string GetDirectories(string path); 计算机学院计算机学院WebWeb开发与安全防范开发与安全防范304l5. 获取当前目录下的所有文件l方法声明如下:public static string GetFiles(string path); 计算机学院计算机学院WebWeb开发与安全防范开发与安全防范3057.3 任务一:成员与角色管理任务一:成员与角色管理l7.3.1 新建成员管理页面计算机学院计算机学院WebWeb开发与安全防范开发与安全防范306l7.3.2 配置成员与角色管理l1.新建一个Membership目录计算机学院计算机学院WebWeb开发与安全防范开发与安全防范307l2.新建注册用户l单击”网站“菜单中的”ASP.NET配置”命令 计算机学院计算机学院WebWeb开发与安全防范开发与安全防范308计算机学院计算机学院WebWeb开发与安全防范开发与安全防范309l3.为membership 目录建立访问规则计算机学院计算机学院WebWeb开发与安全防范开发与安全防范310web.config配置文件的代码 7.3.3 实现用户登录实现用户登录 l1、新建包含登录连接的页面l选择“AnonymousTemplate”,然后在图7-10中输入相关的文字,如“你还没有登录,请单击登录连接登入“ 计算机学院计算机学院WebWeb开发与安全防范开发与安全防范311l2 新建登录页面l右键单击”Membership”项目,在弹出的快捷菜单中选择“添加新项“命令,在模版项目中选择“Web窗体”,并将这个新页面设置为“Login.aspx” 计算机学院计算机学院WebWeb开发与安全防范开发与安全防范312l3 测试登录功能计算机学院计算机学院WebWeb开发与安全防范开发与安全防范313l4 新建并测试Members.aspx页面l右键单击Membership项目中的MemberPages目录,在弹出的快捷菜单中选择”添加新项“命令,在模版项目中选择”Web窗体“,并将这个新页面设置为Members.aspx 计算机学院计算机学院WebWeb开发与安全防范开发与安全防范314l7.3.4注册新用户l1 新建Register.aspx页面l右键单击Membersship项目,在弹出的快捷菜单中选择“添加新项”命令,在模板项目中选择“Web窗体”,并将这个新页面设置为Register.aspx 计算机学院计算机学院WebWeb开发与安全防范开发与安全防范315l2.测试Register.aspx页面计算机学院计算机学院WebWeb开发与安全防范开发与安全防范316l3.更改密码l右键单击“Menbership”项目中的“MemberPages”目录,在弹出的快捷菜单中选择“添加新项”命令,在模板项目中选择“Web 窗体”,并将这个新页面的名称设定为ChangePassword.aspx。 计算机学院计算机学院WebWeb开发与安全防范开发与安全防范317计算机学院计算机学院WebWeb开发与安全防范开发与安全防范318l7.1.5 在项目中实现成员管理l1.会员注册计算机学院计算机学院WebWeb开发与安全防范开发与安全防范319计算机学院计算机学院WebWeb开发与安全防范开发与安全防范320l2. 会员登录计算机学院计算机学院WebWeb开发与安全防范开发与安全防范321计算机学院计算机学院WebWeb开发与安全防范开发与安全防范322l3. Default.asp页面的实现计算机学院计算机学院WebWeb开发与安全防范开发与安全防范323计算机学院计算机学院WebWeb开发与安全防范开发与安全防范324l7.1.6 在项目中实现角色管理l1相册的管理计算机学院计算机学院WebWeb开发与安全防范开发与安全防范325l2 相册的显示l公开的相册可以让所有的浏览者访问,非公开的相册内容只有具有Administrators角色或者Friends角色的注册用户才能访问。 计算机学院计算机学院WebWeb开发与安全防范开发与安全防范326l3 角色的管理 计算机学院计算机学院WebWeb开发与安全防范开发与安全防范3277.4 任务二:成员与角色的安全任务二:成员与角色的安全防御防御 l7.4.1 成员与角色的安全概念 l“认证”和“授权”是两件事情,也就是说:认证的目的是为了认出用户是谁,而授权的目的是为了决定用户能够做什么。 l7.4.2 密码安全防御l1) 密码长度方面l重要应用要求长度为8位以上,并考虑双因数认证。 l2 )密码复杂度方面l为大写、小写字母、数字、特殊符号中两种以上的组合 计算机学院计算机学院WebWeb开发与安全防范开发与安全防范328计算机学院计算机学院WebWeb开发与安全防范开发与安全防范329 多因素认证提高了攻击的门槛。比如一个支付宝交易使用了密码与数字证书双因素认证,成功完成该交易必须满足两个条件:一是密码正确;二是进行支付的电脑必须安装了该用户的数字证书。 综合练习综合练习l1 实现一个网站,只有登录用户才能访问,在相关页面中使用Login控件、ChangePassword控件。 l2 在上面设计的网站中,添加角色“超级用户”,实现只有“超级用户”角色的用户才能访问Admin文件夹下的网页。计算机学院计算机学院WebWeb开发与安全防范开发与安全防范330l谢谢!计算机学院计算机学院WebWeb开发与安全防范开发与安全防范331“十二五十二五”职业教育国家规划教材(经全国职业职业教育国家规划教材(经全国职业教育教材审定委员会审定)教育教材审定委员会审定) 高等职业教育精品示范教材(信息安全系列)高等职业教育精品示范教材(信息安全系列)Web开发与安全防范开发与安全防范第第8章章 网站发布网站发布 知识目标知识目标l掌握网站发布的方法l认识跨站攻击计算机学院计算机学院WebWeb开发与安全防范开发与安全防范334技能目标技能目标l网站发布lXSS跨站攻击与防御计算机学院计算机学院WebWeb开发与安全防范开发与安全防范335技能基础技能基础l8.1 文件的读写l流的基本操作包括:l读取(Read):从流到数据结构(如字节数组)的数据传输l写入(Write):从数据结构到流的数据传输l查找(Seek):对流内的当前位置进行查询和修改l1. 字节流的读写l构造函数:public New(string path,FileMode mode,FileAccess access)计算机学院计算机学院WebWeb开发与安全防范开发与安全防范336l其中,参数path是指被操作文件的名称,包含完整的路径说明。l参数mode是指定被操作文件的模式,其值包括 Append、Create、CreateNew、Open、 OpenOrCreate、Truncate。lAppend是指打开文件并将读写位置移到文件尾,文件不存在则创建新文件,只能同FileAccess.Write一起使用。lCreate,创建新文件,如果文件已存在,文件内容将被删除;lCreateNew,创建新文件,如果文件已存在,则引发异常;lOpen,打开现有文件,如果文件不存在,则引发异常;lOpenOrCreate,如果文件存在,打开文件,否则,创建新文件;lTruncate,打开现有文件,并将文件所有内容删除。计算机学院计算机学院WebWeb开发与安全防范开发与安全防范337计算机学院计算机学院WebWeb开发与安全防范开发与安全防范338l2. 字符流的读写l(1)StreamWriter类l以一种特定的编码向输出流中写入字符,StreamWriter 类的常用构造函数有如下2 种:lStreamWriterExample (string path);lStreamWriterExample (string path, bool append);。计算机学院计算机学院WebWeb开发与安全防范开发与安全防范339计算机学院计算机学院WebWeb开发与安全防范开发与安全防范340l(2)StreamReader 类l构造函数StreamReader(string path):参数是要读文件的路径。l方法int Read():从流中读取一个字符,并使读字符位置移动到下一个字符。返回代表读出字符ASCII字符值的int类型整数,如果没有字符可以读出,返回-1。如果sr是StreamReader对象,读取一个字符的用法如下:char c=(char)sr.Read()。l方法string ReadLine():从流中读取一行字符并将数据作为字符串返回。 计算机学院计算机学院WebWeb开发与安全防范开发与安全防范341计算机学院计算机学院WebWeb开发与安全防范开发与安全防范3428.2 任务一:网站发布任务一:网站发布l8.2.1 注册用户lhttp:/www.aspspider.com免费提供ASP.NET2.0的运行空间 计算机学院计算机学院WebWeb开发与安全防范开发与安全防范343l8.2.2 创建网站l单击“Create web site”链接 计算机学院计算机学院WebWeb开发与安全防范开发与安全防范344l8.2.3 上传网站文件l压缩后,单击界面上方的“Control Panel” 计算机学院计算机学院WebWeb开发与安全防范开发与安全防范345计算机学院计算机学院WebWeb开发与安全防范开发与安全防范346计算机学院计算机学院WebWeb开发与安全防范开发与安全防范347l8.2.4 附加数据库计算机学院计算机学院WebWeb开发与安全防范开发与安全防范348l在web.config配置文件中,正确设置这两个数据可的链接字符串,修改Web.config配置文件中的.部分为如下 计算机学院计算机学院WebWeb开发与安全防范开发与安全防范349l8.2.5 在互联网上运行网站l输入访问地址,打开首页 计算机学院计算机学院WebWeb开发与安全防范开发与安全防范3508.3任务二:任务二:XSS攻击与防御攻击与防御 l运行http:/aspspider.ws/cq438069279/DefaultLook.aspx ,在文本框中如果输入“document.location.href=”http:/www.baidu.com“”,则跳转到百度,如果攻击者注入到该网站的href是一个可被执行或试图安装间谍软件的Web,那么攻击就变得严重了,这就是XSS漏洞的攻击 计算机学院计算机学院WebWeb开发与安全防范开发与安全防范351l8.3.1 XSS攻击l(1)在Visual Studio 2005中创建新解决方案,命名为xssl 计算机学院计算机学院WebWeb开发与安全防范开发与安全防范352l(2)将Default.aspx替换为如下代码:计算机学院计算机学院WebWeb开发与安全防范开发与安全防范353l通过使用下面代码在commentInput文本框中接受用户输入,并且将TextMode赋值为“MultiLine”允许输入多行文本并执行换行 计算机学院计算机学院WebWeb开发与安全防范开发与安全防范354l(3) 在文本框中输入window.alert(Hello world);,当单击Submit按钮时 计算机学院计算机学院WebWeb开发与安全防范开发与安全防范355l8.3.2 XSS防御l设置commentOutput.Text属性,使示例页面变得安全 计算机学院计算机学院WebWeb开发与安全防范开发与安全防范356l输入“window.alert(Hello world);”再提交,看到输入的“window.alert(Hello world);”并没有在浏览器端执行 ,而是被编码后显示在了页面上 计算机学院计算机学院WebWeb开发与安全防范开发与安全防范357综合训练综合训练l1 将自己所完成的网站发布到IIS中。l2将自己所完成的网站通过虚拟主机服务提供商(http:/www.aspspider.com)发布到互联网上。计算机学院计算机学院WebWeb开发与安全防范开发与安全防范358l谢谢!计算机学院计算机学院WebWeb开发与安全防范开发与安全防范359“十二五十二五”职业教育国家规划教材(经全国职业职业教育国家规划教材(经全国职业教育教材审定委员会审定)教育教材审定委员会审定) 高等职业教育精品示范教材(信息安全系列)高等职业教育精品示范教材(信息安全系列)Web开发与安全防范开发与安全防范第第9章章 安全开发流程安全开发流程(SDL) 知识目标知识目标l理解SDLl理解软件工程中实施SDL计算机学院计算机学院WebWeb开发与安全防范开发与安全防范362技能目标技能目标l掌握SDL实战经验l掌握SDL实施方法计算机学院计算机学院WebWeb开发与安全防范开发与安全防范3639.1 SDL简介简介l安全开发流程,能够帮助企业以最小的成本提高产品的安全性。实施好安全开发流程,对企业安全的发展来说,可以起到事半功倍的效果。 计算机学院计算机学院WebWeb开发与安全防范开发与安全防范364lSDL的全称是Security Development Lifecycle,即:安全开发生命周期。它是由微软最早提出的, SDL的大致步骤如下: 计算机学院计算机学院WebWeb开发与安全防范开发与安全防范365培训要求设计实施验证发布响应核心安全培训确定安全要求创建质量门/错误标尺安全和隐私风险评估确定设计要求分析攻击面威胁建模使用标准的工具弃用不安全的函数静态分析动态分析模糊测试攻击面评析事件响应计划最终安全评析发布存档执行事件响应计划9.1.1 微软微软SDL过程阶段过程阶段l阶段:培训l开发团体的所有成员都必须接受适当的安全培训,了解相关的安全知识。 l微软推荐的培训,会覆盖安全设计,威胁建模,安全编码,安全测试,隐私等方面的知识。 计算机学院计算机学院WebWeb开发与安全防范开发与安全防范366l阶段:安全要求l在项目确立之前,需要提前与项目经理或者产品经理进行沟通,确定安全的要求和需要做的事情。确认项目计划和里程碑,尽量避免因为安全问题而导致项目延期发布 计算机学院计算机学院WebWeb开发与安全防范开发与安全防范367l阶段:质量门栏l质量门和栏用于确定安全和隐私质量的最低可接受级别。l栏是应用与整个软件开发项目的质量门,用于定义安全漏洞的严重性阀值。例如,应用程序在发布时不得包含具有“关键”或“重要”评价的已知漏洞。栏一经设定,便决不能放松。 计算机学院计算机学院WebWeb开发与安全防范开发与安全防范368l阶段:安全和隐私风险评估l安全风险评估()和隐私风险评估()是一个必须的过程,这些评估必须包括以下信息:l(1)(安全)项目的哪些部分在发布前需要威胁模型?l(2) (安全)项目的哪些部分在发布前需要进行安全设计评析?l(3)(安全)项目的哪些部分(如果有)需要由不属于项目团队且双方认可的小组进行渗透测试?l(4) (安全)是否存在安全顾问认为有必要增加的测试或分析要求以缓解安全风险?l(5) (安全)模糊测试要求的具体范围是什么?l(6)(隐私)隐私影响评级如何?计算机学院计算机学院WebWeb开发与安全防范开发与安全防范369l阶段5:设计要求l在设计阶段应仔细考虑安全和隐私问题,在项目初期确定好安全需求,尽可能避免安全引起的需求变更。计算机学院计算机学院WebWeb开发与安全防范开发与安全防范370l阶段6:减小攻击面l减小攻击面与威胁建模紧密相关,不过它解决安全问题的角度稍有不同。减小攻击面通过减少攻击者利用潜在弱点或漏洞的机会来降低风险。减小攻击面包括关闭或限制对系统服务的访问,应用“最小权限原则”,以及尽可能地进行分层防御。计算机学院计算机学院WebWeb开发与安全防范开发与安全防范371l阶段7:威胁建模l为项目或产品面临的威胁建立模型,明确可能来自的攻击有哪些方面。微软提出了STRIDE模型以帮助建立威胁模型,这是非常好的做法。计算机学院计算机学院WebWeb开发与安全防范开发与安全防范372l阶段8:使用指定的工具l开发团队使用的编译器、链接器等相关工具,可能会涉及一些安全相关的环节,因此在使用工具的版本上,需要提前与安全团队进行沟通。计算机学院计算机学院WebWeb开发与安全防范开发与安全防范373l阶段9:弃用不安全的函数l许多常用函数可能存在安全隐患,应该禁用不安全的函数或API,使用安全团队推荐的函数。计算机学院计算机学院WebWeb开发与安全防范开发与安全防范374l阶段10:静态分析l代码静态分析可以由相关工具辅助完成,其结果与人工分析相结合。计算机学院计算机学院WebWeb开发与安全防范开发与安全防范375l阶段11:动态程序分析l动态分析是静态分析的补充。,用于测试环节验证程序的安全性。计算机学院计算机学院WebWeb开发与安全防范开发与安全防范376l阶段12:模糊测试(Fuzzing Test)l模糊测试是一种专门形势的动态分析,它通过故意向应用程序引入不良格式或随机数据诱发程序故障。模糊测试策略的制定,以应用程序的预期用途,以及应用程序的功能和设计规范为基础。安全顾问可能要求进行额外的模糊测试,或者扩大模糊测试的范围和增加持续时间。计算机学院计算机学院WebWeb开发与安全防范开发与安全防范377l阶段13:威胁模型和攻击面评析l项目经常会因为需求变更等因素导致最终的产出偏离原本设定的目标,因此在项目后期重新对威胁模型和攻击面进行评析是有必要的,能够及时发现问题并修正。计算机学院计算机学院WebWeb开发与安全防范开发与安全防范378l阶段14:事件响应计划l受SDL要求约束的每个软件在发布时都必须包含事件响应计划。即使在发布不包含任何已知漏洞的产品,也可能在日后面临新出现的威胁。需要注意的是,如果产品中包含第三方的代码,也需要留下第三方的联系方式并加入事件响应计划,以便在发生问题时能够找到相应的人。计算机学院计算机学院WebWeb开发与安全防范开发与安全防范379l阶段15:最终安全评析(FSR) l发布前仔细检查对软件执行的所有安全活动,将得出三种结果。l (1)通过FSR。在FSR过程中确定的所有安全和隐私问题都已得到修复或缓解。l (2)通过FSR但有异常。在FSR过程中确定的所有安全问题和隐私问题都已得到修复或缓解,并且/或者所有异常都已得到圆满解决。无法解决的问题都将记录下来,在下次发布时更正。 l (3)需上报问题的FSR.,如果团队为满足所有SDL要求,并且安全顾问和产品团队无法达成可接受的折中,则安全顾问不能批准项目,项目不能发布。团队必须在发布之前解决所有可以解决的问题,或者上报搞基管理层进行抉择。计算机学院计算机学院WebWeb开发与安全防范开发与安全防范380l阶段16:发布/存档l在通过FSR或者虽有问题但达成一致后,可以完成产品的发布。但发布的同时仍需对各类问题和文档进行存档,为紧急响应合格产品升级提供帮助。计算机学院计算机学院WebWeb开发与安全防范开发与安全防范381l从以上的过程可以看出,微软的SDL过程实施非常细致。微软这些年来也会一直帮助公司的所有产品团队,以及合作伙伴实施SDL,效果相当显著。 l相对于微软SDL,OWASP推出了SAMM(Software Assurance Maturity Model), SAMM和微软SDL的主要区别在于,SDL适用于软件开发商,他们以贩售软件为主要产业;而SAMM更适用于自主开发软件的使用者,如银行或在线服务提供商。软件开发商的软件工程往往较为成熟,有着严格的质量控制;而自主开发软件的企业组织,则更强调高效,因为在软件工程的做法上也存在差异。 计算机学院计算机学院WebWeb开发与安全防范开发与安全防范3829.1.2敏捷敏捷SDL l就微软的SDL过程来看,仍然显得较为厚重。它适用于采用瀑布法进行开发的软件开发团队。l敏捷开发往往是采用“小步快跑”的方式,不断地完善作品,并没有非常规范的流程,文档也尽可能简单。这样做对于安全来说,往往是一场灾难。l微软为敏捷开发专门设计了敏捷SDL,敏捷SDL的思想其实就是以变化的观点实施安全的工作。需求和功能可能一直在变化,代码可能也在发生变化,这要求在实施SDL时需要在每个阶段更新威胁模型和隐私策略,在必要的环节迭代模糊测试、代码安全分析等工作。计算机学院计算机学院WebWeb开发与安全防范开发与安全防范3839.2 SDL实战经验实战经验l对于互联网公司来说,更倾向于使用敏捷开发,需要经过一些定制和裁剪才能适用于各种不同的环境。根据在软件公司实施SDL的经验,总结出以下几条准则。 l(1)与项目经理进行充分沟通,排出足够的时间。l一个项目的安全评估,在开发的不同环节有着不同的安全要求,而这些安全要求都需要占用开发团队的时间。因此在立项阶段与项目经理进行充分的沟通时非常有必要的。l明确在什么阶段安全工程师需要介入,需要多长时间完成工作,同时预留出多少时间给开发团队用以开发功能或者修复安全漏洞。计算机学院计算机学院WebWeb开发与安全防范开发与安全防范384l(2)规范公司立项流程,确保所有项目通知到安全团队l如果根据以往发生的安全事件,往往会发现这样一个现象:安全事件产生的原因并不复杂,但总是发生在大家疏忽的一些地方。l在实施SDL的过程中,技术方案的好坏往往不是最关键的,最糟糕的事情是SDL并没有覆盖到公司的全部项目,最后导致安全事件的发生。l如何才能保证公司的所有项目都能够及时通知到安全团队呢?在公司规模较小时,很容易做到这些事情。但当公司大到一定规模时,出现多个部门与多个项目组,沟通成本就大大增加。从公司层面建立一盒完善的“立项制度”,就变得非常有必要了。计算机学院计算机学院WebWeb开发与安全防范开发与安全防范385l(3)树立安全部门的权威,项目必须由安全部门审核完成才能发布。l在实施SDL的过程中,除了教育项目成员(如项目经理、产品经理、开发人员、测试人员等)实施安全的好处外,安全部门还需要树立一定的权威。l必须通过规范和制度,明确要求所有项目必须在安全审核完成后才能发布。如果没有这样的权威,对于项目组来说,安全就变成了一项可有可无的东西。而如果产品急着发布,很可能因此砍掉或裁减掉部分安全需求,也可能延期修补漏洞,从而导致风险提高。计算机学院计算机学院WebWeb开发与安全防范开发与安全防范386l(4)将技术方案写入开发,测试的工作手册中。l对于开发、测试团队来说,对其工作最有效的约束方式就是工作手册。对于开发者来说,这个手册可能是开发规范。开发规范涉及的方面比较广,比如函数的大小写方式、注释的写法等都会涵盖。很多开发团队的规范,其内容鲜有涉及安全的,少量有安全规范的,其内容也存在各种各样的问题。l因此,与其事后通过代码审核的方式告知开发者代码存在漏洞,需要修补,倒不如直接将安全技术方案写入开发者的代码规范中。比如规定好哪些函数是要求禁用的,只能使用哪些函数;或者封装好一些安全功能,在代码规范中注明在什么情况下使用什么样的安全API。 计算机学院计算机学院WebWeb开发与安全防范开发与安全防范387l(5)给工程师培训安全方案l在微软的SDL框架中,第一项就是培训。培训的作用不可小觑,它是技术方案与执行者之间的调和剂。 l培训最重要的作用是,在项目开发之前,能够使开发者知道如何写出安全的代码,从而节约开发成本。因为如果开发者未经培训,可能在代码审核阶段会被找出非常多的安全bug,修复每一个安全bug都将消耗额外的开发时间;同时开发者不能理解这些安全问题,由安全工程师对每个问题进行解释与说明,也是一份额外的时间支出。 计算机学院计算机学院WebWeb开发与安全防范开发与安全防范388l(6)记录所有的安全bug,激励程序员编写安全的代码l为了更好地推动项目组写出安全的代码,可以尝试给每个开发团队设立绩效。被发现漏洞最少的团队可以得到奖励,并将结果公布出来。如此,项目组之间将产生一些竞争的氛围,开发者们将更努力于遵守安全规范,写出安全的代码。此举还能帮助不断提高开发者的代码质量,形成良性的循环。在互联网公司,产品开发生命周期大致可以划分为需求分析阶段、设计阶段、开发阶段、测试阶段。下面将就这几个阶段,介绍一些常用的SDL实施方法和工具计算机学院计算机学院WebWeb开发与安全防范开发与安全防范3899.2.1需求分析与设计阶段需求分析与设计阶段l此初始阶段将论证项目的目标、可行性、实现方向等问题l在需求阶段,安全工程师需要关心产品主要功能上的安全强度和安全体验是否足够,主要需要思考安全功能。比如需要给产品设计一个“用户密码取回”功能,那么是通过手机短信的方式取回,还是邮箱取回?需要从产品发展的大方向上考虑问题l在安全领域中,“安全功能”与“安全的功能”是两个不同的概念。“安全功能”是指产品本身提供给用户的安全功能,比如数字证书、密码取回问题等功能。而“安全的功能”,则指在产品具体功能的实现上要做到安全,不要出现漏洞而被黑客利用l比如在“用户取回密码”时常用到的功能:安全问题,这个功能是一个安全功能;但若是在代码实现上存在漏洞,则可能成为一个不安全的功能。 390l在需求分析与设计阶段,因为业务的多样性,一份checklist并不一定能覆盖到所有的情况。Checklist并非万能的,在实际应用时,更多的要依靠安全工程师的经验作出判断。l一个最佳实践是给公司拥有的数据定级,对不同级别的数据定义不同的保护方式,将安全方案模块化。这样在reviw项目的需求和设计时,根据项目涉及的数据敏感程度,可以套用不同的等级化保护标准。计算机学院计算机学院WebWeb开发与安全防范开发与安全防范3919.2.2开发阶段开发阶段 l这是安全工作的一个重点,在需求层面,安全改变业务的地方较少,因此应当力求代码实现上的安全,也就是做到“安全的功能“l首先要分析可能出现的漏洞,并从代码上提供可行的解决方案。根据经验,可设计一套适用于企业自身开发环境的安全方案。l(1)提供安全的函数l例如在“Web框架安全”方面,很多安全功能放到开发框架中实现会大大降低程序员的开发工作量,是一种值得推广的经验。l比如在对抗XSS攻击时,需要编码所有的变量再进行输出。为此我们在模板中实现了安全宏。又比如微软在面对同样问题时,为开发者提供了安全函数库 计算机学院计算机学院WebWeb开发与安全防范开发与安全防范392l(2)代码安全审计工具l常见的一些代码审计工具,在面对复杂项目时往往会束手无策。这一般是由两个原因造成的。l首先,函数的调用时一个复杂的过程,甚至常有一个函数调用另外一个文件中函数的情况出现。当代码审计工具找到敏感函数如eval()时回溯函数的调用路径时往往会遇到困难。l其次,如果程序使用了复杂的框架,则代码审计工具往往也缺乏对框架的支持,从而造成大量的误报和漏报。计算机学院计算机学院WebWeb开发与安全防范开发与安全防范393l实际上,对于甲方公司来说,完全可以根据开发规范来定制代码审计工具。其核心思想是,并非直接检查代码是否安全,二是检查开发者是否遵守了开发规范。l这样就把复杂的“代码自动化审计”这一难题,转化为“代码是否符合开发规范”的问题。而开发规范在编写时就可以写成易于审计的一种规范。最终,如果开发规范中的安全方案没有问题的话,当开发者严格遵守开发规范时,产出的代码就应该是安全的。 l这些经验对于以Web开发为主的互联网公司来说,具有高度的可操作性。计算机学院计算机学院WebWeb开发与安全防范开发与安全防范3949.2.3测试阶段测试阶段l这是产品发布前的最后一个阶段,需对产品进行充分的安全测试,验证需求分析。设计阶段的安全功能是否符合预期的目标,并验证在开发阶段发现的所有安全问题是否得到解决。l安全测试应该是独立于代码审计而存在。“安全测试”相对于“代码审计”而言,有两个好处:一是有一些代码逻辑较为复杂,通过代码审计难以发现所有的问题,而通过安全测试可以将问题看得更清楚;二是有一些逻辑漏洞通过安全测试,可以更快地得到结果。l安全测试,一般分为自动化测试和手动测试两种方式。计算机学院计算机学院WebWeb开发与安全防范开发与安全防范395l自动化测试以覆盖性的测试为目的,可以通过“Web安全扫描器”对项目或产品进行漏洞扫描。l目前Web安全扫描器对“XSS”“SQL Injection”、“Open Redirect”、“PHP File Include”等漏洞的检测技术已经比较成熟。这是因为这些漏洞的检测方法主要是检测返回结果的字符串特征。l而对于“CSRF”、“越权访问”、“文件上传”等漏洞,却难以达到自动化检测的效果。这是因为这些漏洞涉及系统逻辑或业务逻辑,有时候还需要人机交互参与与页面流程。因此这类漏洞的检测更多的需要依靠手动测试完成。l安全测试完成以后,需要生成一份安全测试报告。这份报告并不是扫描器的扫描报告,扫描报告可能会存在误报与漏报,因此扫描报告需要经过安全工程师的最终确认。确认后的扫描报告,结合手动测试的结果,最终形成一份安全测试报告。l安全测试报告中提到的问题,需要交给开发工程师进行修复。漏洞修补完成后,再迭代进行安全测试,以验证漏洞的修补情况。由此可见,在项目初期与项目经理进行充分沟通,预留出代码审计、安全测试的时间,是一件很重要的事情。 综合练习综合练习l1 在软件工程中,为什么要实施SDL?l2 针对自己的开发小组分析,可以在哪些阶段实施SDL,以及可以采用哪些实施工具?l谢谢!
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号