代码改变世界

让系统运行的更安全

2013-07-18 08:16  phpor  阅读(310)  评论(0编辑  收藏  举报

一 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