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

  • 相关阅读:
    堆排序
    深入理解创建类设计模式(Creational Patterns)
    (Head First)设计模式基础
    SpringMVC中的适配器模式应用
    软工团队任务
    visio画UML用例图
    安卓架构设计
    结对项目编程之代码进展
    工大助手(爬虫——查成绩部分)
    设计模式
  • 原文地址:https://www.cnblogs.com/phpor/p/3197224.html
Copyright © 2011-2022 走看看