软件安全笔记Chapter10

第十章 WEB安全基础

WEB基础

HTTP协议:超文本传输协议

统一资源标示符:URL

HTTP协议采用了请求/响应模型。

HTML:超文本标记语言

  • Head:头 关于网页的信息
  • body:主体 关于网页的具体内容

标记一般都是成对的出现的,\为我们的开头,然后\就是我们的结尾

(部分标记除外例如:\

1
<head></head>

这2个标记符分别表示头部信息的开始和结尾。头部中包含的标记是页面的标题、序言、说明等内容,它本身不作为内容来显示,但影响网页显示的效果。头部中最常用的标记符是标题标记符和meta标记符,其中标题标记符用于定义网页的标题,它的内容显示在网页窗口的标题栏中,网页标题可被浏览器用作书签和收藏清单。

JavaScript:是一种嵌入在我们的html语言中的脚本语言,可以提供动态功能

1
2
3
4
5
6
7
8
9
10
<html>  
<head>
<title>Javascript简单示例</title>
</head>
<body>
<script language="javascript">
alert("第一个javascript");
</script>
</body>
</html>

有它自身的基本数据类型,表达式和算术运算符及程序的基本程序框架

WEB编程环境

WEB静态语言和WEB动态语言

  • WEB静态语言就是通常所见到的超文本标记语言(标准通用标记语言下的一个应用)
  • WEB动态语言主要是ASP、PHP、JAVASCRIPT、JAVA、CGI等计算机脚本语言编写出来的执行灵活的互联网网页程序。

PHP语言

PHP:

  • 是一种解释性语言。PHP的语法和C/C++,Java,Perl,ASP,JSP有相通之处并且加上了自己的语法。
  • 由于PHP是一种面向HTML的解析语言,所以,PHP语句被包含在PHP标记里面,PHP标记外的语句都被直接输出。包括在PHP标记中的语句被解析,在其外的语句原样输出并且接受PHP语句的控制

变量解析当遇到符号($)时产生,解析器会尽可能多地取得后面的字符以组成一个合法的变量名,然后将变量值替换他们,如果$后面没有有效的变量名,则输出”$”。如果想明确的变量名可以用花括号把变量名括起来

HTTP会话管理

HTTP协议属于无状态的通信协议

当浏览器发送请求给服务器的时候,服务器响应,但是当同一个浏览器再发送请求给服务器的时候,他不知道你就是刚才那个浏览器。简单地说,就是服务器不会去记得你

HTTP是短连接的

为了识别不同的请求是否来自同一客户,需要引用HTTP会话机制:

多次HTTP连接间维护用户与同一用户发出的不同请求之间关联的情况称为维护一个会话(session)。

Cookie与session是与HTTP会话相关的两个内容,其中Cookie存在在浏览器,session存储在服务器中

Cookies是服务器在本地机器上存储的小段文本并随每一个请求发送至同一个服务器

  • 正统的cookie分发是通过扩展HTTP协议来实现的,服务器通过在HTTP的响应头中加上一行特殊的指示以提示浏览器按照指示生成相应的cookie。
  • 浏览器检查所有存储的cookie,如果某个cookie所声明的作用范围大于等于将要请求的资源所在的位置,则把该cookie附在请求资源的HTTP请求头上发送给服务器。

cookies的内容:名字,值,过期时间,路径和域

若不设置过期时间,则表示这个cookie的生命期为浏览器会话期间,关闭浏览器窗口,cookie就消失。这种生命期为浏览器会话期的cookie被称为会话cookie

会话cookie一般不存储在硬盘上而是保存在内存里

  • 若设置了过期时间,浏览器就会把cookie保存到硬盘上
  • 存储在硬盘上的cookie可以在不同的浏览器进程间共享,比如两个IE窗口

session id的值应该是一个既不会重复,又不容易被找到规律以仿造的字符串

HTTP请求

method属性指定了与服务器进行信息交互的方法为POST。

交互的四种方法:

  • GET:GET一般用于获取/查询资源信息
  • POST:而POST一般用于更新资源信息
  • DELETE
  • PUT

以?分割URL和传输数据,参数之间以&相连,如:login.action?name=sean&password=123

  • GET请求的数据会附在URL之后
  • POST把提交的数据则放置在是HTTP包的包体中

POST的安全性要比GET的安全性高:

  • GET模式下,通过URL就可以作数据修改
  • GET模式下,用户名和密码将明文出现在URL上,因为登录页面有可能被浏览器缓存、其他人查看浏览器的历史纪录,那么别人就可以拿到你的账号和密码了
  • GET模式下,提交数据还可能会造成跨站请求伪造攻击

PHP连接数据库

表userinfo:有两个字段

  • username
  • pwd

数据库应用开发三步骤:

  • 连接数据库

    • ```sql
      $conn=mysql_connect(“localhost”, “root”, “123456”);
      1
      2
      3
      4
      5

      - 执行SQL操作

      - ```sql
      $result=mysql_db_query("MyDB", $SQLStr, $conn);
  • 关闭连接

    • mysql_free_result($result); mysql_close($conn);
      

Cookie实战

cookie和session的关系:

  • 共性:都可以暂时保存在多个页面中使用的变量。
  • 区别:cookie存放在客户端浏览器,session保存在服务器。它们之间的联系是session ID一般保存在cookie中,来实现HTTP会话管理

工作原理:

  • 生成Cookie:当客户访问某网站时,PHP可以使用setcookie函数告诉浏览器生成一个cookie,并把这个cookie保存在c:\Documents and Settings\用户名\Cookies目录下。
  • 使用Cookie:Cookie是HTTP标头的一部分,当客户再次访问该网站时,浏览器会自动把与该站点对应的cookie发送到服务器,服务器则把从客户端传来的cookie将自动地转化成一个PHP变量。

setcookie格式

  • setcookie(name, value, expire, path, domain, secure)
  • name 必需。规定 cookie 的名称。
  • value 必需。规定 cookie 的值。
  • expire 可选。规定 cookie 的有效期。

十大WEB安全威胁

  • 注入
  • 跨站脚本
  • 遭破坏的身份认证和会话管理
    • 攻击者窃听了用户访问HTTP时的用户名和密码,或者是用户的会话,从而得到sessionID或用户身份信息,进而冒充用户进行HTTP访问的过程
    • 检测是否使用HTTPS的最简单方法就是使用网络嗅探工具
    • 会话劫持就是一种窃取用户SessionID后,使用该SessionID登录进入目标账户的攻击方法,此时攻击者实际上是利用了目标账户的有效Session。如果SessionID是被保存在Cookie中,则这种攻击被称为Cookie劫持。
    • 如果攻击者窃取了用户的Session,并一直保持一个有效的Session,攻击者就能通过此有效Session一直使用用户的账户,即成为一个永久的“后门”,这就是会话保持攻击
  • 不安全的直接对象引用
    • 直接对象引用:是指WEB应用程序的开发人员将一些不应公开的对象引用直接暴露给用户,使得用户可以通过更改URL等操作直接引用对象。
    • 不安全的直接对象引用:是指一个用户通过更改URL等操作可以成功访问到未被授权的内容。比如一个网站上的用户通过更改URL可以访问到其他用户的私密信息和数据等。
  • 伪造跨站请求
  • 安全配置错误
    • 默认的用户名密码没有及时修改
  • 不安全的加密存储
    • Web应用系统没有对敏感性资料进行加密
  • 没有限制的URL访问
  • 传输层保护不足和未验证的重定向和转发
    • 中间人攻击(Man-in-the-middle attack),即MITM。HTTP连接的目标是Web服务器,如果传输层保护不足,攻击者可以担任中间人的角色,在用户和Web服务器之间截获数据并在两者之间进行转发,使用户和服务器之间的整个通信过程暴露在攻击者面前。