项目安全考虑几个点!

常见安全问题: 恶意攻击,暴力破解 Sql注入 Xss攻击

首先针对——–恶意攻击,暴力破解

**Get方式恶意攻击,(dos),通常硬件的方式来防止,防火墙。
Post方式暴力破解,从程序的角度来防止,最通用的方法就是 增加 验证码。
简单举一个例子:如果没有验证码的话,我可以写一个不断遍历的函数去破解账户和密码,这样子就很不安全。所以验证码在登陆的时候是很有必要的**

备注:验证码常见错误:
1.字体文件的位置不对
2.由于在生成验证码的时候,使用了header()函数,它有一个特点,它之前不能有任何的输出,包括空格。 
解决办法,从index.php开始查找,凡是被包含进来的文件都需要查找
还需要注意一个的,就是你的文件编码要确保是 utf-8的,而不是带BOM头的utf-8

其次是 ———-Sql注入

**什么是sql注入?
通过 在表单中填入特殊的字符 或者 是 url中增加特殊的字符,然后想数据库发起请求,拼凑出sql语句,达到攻击的目的。
有两种形式:Post表单提交。Get,url传参**
举个简单例子:
万能密码:xxx’ or ‘1
在拼凑成sql语句 where id = ‘xxx’ or ‘1’这样子不管前面我输入什么东西,后面都是对的, 称万能密码
再如 : get传递参数的时候 id=2;drop table;后面拼接了 ;drop table 语句,这样就GG了


如何防范万能密码呢? 
**最简单的方式,就是给密码加密。 加密的方式有很多,比如md5,sha1**
----------------------------------------------

如何防止万能用户名 注意:不要加密,不可取 不管是万能用户名 和 万能密码, 他们都利用了 一个 特殊字符-------单引号。让你的单引号失去本身的意义。
------------------------------------------------------------------------

单引号转义,使用addslashes函数
不懂的查询PHP手册,

--------------------
所以,在接受get传参的时候,也需要处理一下,通常就是传递id的时候。
处理方法很简单,只需要将参数 转成 整型即可。
如 1 or 1 -----> 1 
有哪些方式:
强制转换,使用函数intval 或者 数据类型的 关键字 int
隐式转换,通过运算, 只需要 +0 即可

这里写图片描述

最后是——-Xss攻击

什么是xxs攻击?
**Xss: cross site script 跨站脚本攻击
Css 被占用,表示样式表
恶意攻击者往Web页面里插入恶意html代码,当用户浏览该页之时,嵌入其中Web里面的html代码会被执行,从而达到恶意攻击用户的特殊目的。**

例如:恶意破坏者在文本框里面输入 “hello 楼主< script > for(var i=1;i<2000;i++){alert(1)}< /script >”这样子不断弹窗,用户就以为是网站出现问题,不浏览了
又如:留言 ”hello 楼主 < /table >“;破坏了原来的布局,使得页面混乱


如何防止呢? 
找出xss攻击的本质,通过 标签(一对尖括号)来达到攻击的目的,所以我们只需要将尖括号 进行 转义,这就是php中提到的 实体转义。 Htmlspecialchars函数 和 htmlentites函数
------------------------------------------------------------------------

转义其实就是:把”<” “>” 等特殊符号转化成计算机能识别的符号,实体,例如 & nbsp; & copy;这些

通过上面的分析,我们得出一个结论: 凡是是用户提交的信息,都是不能相信的,都需要进行处理,其中之一就是转义。 也就意味着在所有的 收集表单信息的地方,都要进行过滤处理

附上两个简单过滤的函数,可以写成全局函数,每次用户提交数据的时候,都必须调用该函数。谢谢大家

function deepslashes($data){
    //判断$data的表现形式,并且需要处理空的情况
    if (empty($data)){
        return $data;
    }
    if (is_array($data)){
        //数组,对其进行遍历
        foreach ($data as $v){
            return deepslashes($v);
        }
    } else {
        //单一变量
        return addslashes($data);
    }
}

或者写成

function deepslashes($data){

//判断$data的表现形式,并且需要处理空的情况
if (empty($data)){
    return $data;
    }
//不懂array_map()函数的看下面截图吧
return is_array($data) ? array_map('deepslashes', $data) : addslashes($data) ;
}

//批量实体转义
function deepspecialchars($data){
    if (empty($data)){
        return $data;
    }
    return is_array($data) ? array_map('deepspecialchars', $data) : htmlspecialchars($data);
}

这里写图片描述

posted @ 2016-10-06 23:37  小郑6  阅读(116)  评论(0编辑  收藏  举报