zoukankan      html  css  js  c++  java
  • 让系统运行的更安全

    一 php

    1 php的错误处理机制很可能会将一些重要的信息暴露给攻击者,所以在系统发布之前应该做到1、彻底关闭错误报告,可利用将error_reporting()的参数设为0的方式,还可以将php配置文件中display_errors设为off关闭状态或指定错误输入文件。2、使用php自定义的错误处理函数创建自己的错误处理机制。

    2 使用的变量,尤其是用于安全策略的变量,最好是要进行初始化,默认的设置为false。因为如果register_globals设为on的话(现在的版本已经默认为off),可以通过url传递变量的方式可以设置变量的值,例如

    <?php
    // 当用户合法的时候,赋值 $authorized = true
    if (authenticated_user() ) {
        $authenrized = true;    
    }
    
    // 由于并没有事先把 $authorized 初始化为 false,
    // 当 register_globals 打开时,可能通过GET auth.php?authorized=1 来定义该变量值
    // 所以任何人都可以绕过身份验证
    if ($authorized) {
        include "/highly/sensitive/data.php";
    }
    ?>

    所以初始化代码是一个很好的习惯,如果在上面的代码执行之前加入$authorized = false 的话,无论 register_globals 是 on 还是off 都可以,因为用户状态被初始化为未经认证。

    3 明确数据来源,如果事先确切知道变量是哪里来的,就可以检查所提交的数据是否是从不正当的方式提交而来

    <?php
    if (isset($_COOKIE['MAGIC_COOKIE'])) {
    
        // MAGIC_COOKIE 来自 cookie
        // 这样做是确保是来自 cookie 的数据
    
    } elseif (isset($_GET['MAGIC_COOKIE']) || isset($_POST['MAGIC_COOKIE'])) {
    
       echo "Security violation, admin has been alerted.";
       exit;
    
    } else {
    
       // 这一次请求中并没有设置 MAGIC_COOKIE 变量
    
    }
    ?> 


    4 永远要验证用户数据和对变量进行初始化

    //危险的变量用法
    <?php
    // 从用户目录中删除一个文件,或者……能删除更多的东西?
    unlink ($evil_var);
    
    // 记录用户的登陆,或者……能否在 /etc/passwd 添加数据?
    fwrite ($fp, $evil_var);
    
    // 执行一些普通的命令,或者……可以执行 rm -rf * ?
    system ($evil_var);
    exec ($evil_var);
    
    ?> 

    必须时常留意你的代码,以确保每一个从客户端提交的变量都经过适当的检查,然后问自己以下一些问题:    

    •        此脚本是否只能影响所预期的文件?            
    •        非正常的数据被提交后能否产生作用?            
    •        此脚本能用于计划外的用途吗?            
    •        此脚本能否和其它脚本结合起来做坏事?            
    •        是否所有的事务都被充分记录了?      

    其他的一些策略,魔术引号,保持更新,可以参照手册


    二 xss和sql注入

    http://wenku.baidu.com/view/e3f7621252d380eb62946d98.html

    1 xss

    1.1 概念

    通过注入跨站脚本(js代码等)的方式来获取信息,像用户名,密码,cookie等。

    1.2 跨站攻击

    跨站攻击:就是以某存在问题和漏洞的站点为跳板扩大攻击范围,从而完成针对该服务器及服务器上每个站点的入侵任务的一种方法

    站点: 就是一个网站,网址。可分为父子站点(站点和虚拟目录)

    1.3 解决方法

    1)在输入端将特殊字符转义,使用htmlspecialchars()函数

    2)在输入端对输入数据的有效性进行校验

    一些常见的检测和过滤包括

    • 输入是否仅仅包含合法的字符
    • 输入如果是数字,数字是否在指定的范围
    • 输入字符串是否超过最大长度限制
    • 输入是否符合特殊的格式要求,譬如email地址、IP地址
    • 不同的输入框在逻辑上存在的耦合和限制的关系
    • 除去输入首尾的空格

    2 参考文章

    2.1 http://baike.baidu.com/view/2633667.htm


    三 cookie

    1 什么是cookie,为什么使用cookie

    2 什么是document

    document 在js中就是文档对象,就是当前窗口或指定窗口对象的文档,当前网页中的所有元素(对象)全部都在document中,使我们可以从脚本中对Html页面的所有元素(对象)进行访问和操作。

    http://hi.baidu.com/elementwong/item/456dbb1c160e2af864eabf6a


    网站

    1 华夏黑客同盟

    http://77169.org/index.html

    2 中国红客联盟

    http://www.cnhonker.com/

    3 邪恶八进制社区

    http://forum.eviloctal.com/

    4 IBM专区

    http://www.ibm.com/Search/?q=xss&co=cn&lo=zh-simplified&sn=&lang=zh&cc=CN&en=utf&hpp=&ibm-submit.x=8&ibm-submit.y=11

  • 相关阅读:
    标签的讲解
    属性分类
    LeetCode 003. 无重复字符的最长子串 双指针
    Leetcode 136. 只出现一次的数字 异或性质
    Leetcode 231. 2的幂 数学
    LeetCode 21. 合并两个有序链表
    象棋博弈资源
    acwing 343. 排序 topsort floyd 传播闭包
    Leetcode 945 使数组唯一的最小增量 贪心
    Leetcode 785 判断二分图 BFS 二分染色
  • 原文地址:https://www.cnblogs.com/phpor/p/3197224.html
Copyright © 2011-2022 走看看