WEB开发中的安全问题

处理安全性问题的策略

保护自身与能够执行业务的可用应用的平衡

  • 以正确的心态开始,在构思和设计之初就要考虑安全性
  • 保证安全 / 可用性之间的平衡
  • 监视应用的安全状况

面临的威胁

  • 敏感数据被访问修改,确保用户只看到他们允许看到的信息

  • 数据丢失

  • 拒绝式服务攻击

  • 恶意代码注入

  • 服务器被攻破

面对的用户

  • 破解人员(尝试找到系统缺陷以实现其目标)
  • 未知情用户
  • 对公司不满的员工
  • 硬件盗窃
  • 代码自身问题

代码的安全性

检查所有组件并改善其安全性

过滤用户输入

验证用户提交的数据
    <?php 
        switch ($_POST['gender']) {
            case 'Male':
            case 'Female':
            case 'Other':
                echo "You are:".$_POST['gender'];
                break;

            default:
                echo "Invalid input value";
                break;
        }
     ?>

防止直接连接web服务器,写入数据

强制确定数据类型
    $numberOfNights = (int)$_POST['numNights'];
    if($nuberOfNights == 0){
        echo "Invalid number";
        exit;
    }

不能假设来自表单的值会是期待值

SQL语句转义
    $itemEscape = mysql_escape_string($item);

防止恶意的SQL注入

转义输出

留言板等组件中,需要显示用户输入的信息,这些信息中可能包含恶意代码,需要进行转换

  • $str = htmlentities($input_str,ENT_QUOTES,“UTF-8”);
  • $str = htmlspecialchars($input_str,ENT_NOQUOTES,“UTF-8”);

代码组织

用户可能请求不能被访问的文件,并且这些文件被输出

  • web服务器配置只允许请求 .php/.html文件;
  • 用户访问的文档应该与不能被直接访问的文档分开存放在不同目录;

代码自身问题

代码中存在敏感信息(配置信息,用户信息,密码信息)

解决:敏感数据放入隔离的文件目录中,使用时在脚本中再引入。

文件系统因素

  • 硬盘被查看(多用户系统中,一份文件被其他用户查看)
  • 过滤用户输入的路径
    • 相对路径:用户可以通过 ..\..\访问其他文件,需要过滤
    • 绝对路径:C:\mysql\my.ini,也主要避免

代码稳定性和缺陷

在项目开始阶段就要考虑应用稳定性

  • 项目评估,越多人参与就能尽快发现问题
  • 足够的测试(人工测试,测试代码)
  • 监控:代码部署后,查看日志、用户反馈

程序执行

执行系统本身的shell命令

  • exec — 执行一个外部程序
    exec('ipconfig',$output,$exitval);

使用escapeshellcmd 转义命令

web服务器安全(apache)

熟悉服务器软件的配置文件,避免默认的配置特性产生安全问题

软件更新

  • 及时安装更新
  • 测试更新版本是否正常运行,测试项目要文档化,确保按照相同的步骤复制正确的服务器环境

查看配置文件

  • 及时备份,用户恢复
  • 记录配置文件的修改

数据库服务器安全

用户和权限系统

了解用户权限配置,遵守权限最小化

发送数据至数据库

发送的数据要过滤,防止sql注入

  • 转义 $itemEscape = mysql_escape_string($item);
  • 数据验证
    • 输入数据的长度
    • 非法字符
    • 输入数据的类型(时间数据,就应该是时间类型)

连接服务器

  • 限制特定用户或主机连接数据库
  • 使用加密连接数据库
  • 确保数据库服务器的连接数+1大于web服务器

运行服务器

不以超级用户权限运行数据库

保护计算机和网络

  • 防火墙 过滤端口(实现隔离区域 DMZ)
  • 隔离区域 将web服务器与外部互联网,内部网络相隔离;
  • 应对DDOS
  • 保持操作系统的更新
  • 只运行必须的软件
  • 保护服务器的物理安全
    • 被盗
    • 灾难
  • 准备应急人员
  • 准备应急硬件

你可能感兴趣的:(WEB开发中的安全问题)