当前位置:首页 >> 网络通讯 >> 网络安全 >> 内容

PHP开发web应用安全总结

时间:2013/4/19 12:09:00 作者:平凡之路 来源:xuhantao.com 浏览:

XSS跨站脚本
概念:恶意攻击者往Web页面里插入恶意html代码,当用户浏览该页之时,嵌入其中Web里面的html代码会被执行,从而达到恶意用户的特殊目的。
危害:
盗取用户COOKIE信息。
跳转到钓鱼网站。
操作受害者的浏览器,查看受害者网页浏览信息等。
蠕虫攻击。
描述:反射型跨站。GET或POST内容未过滤,可以提交JS以及HTML等恶意代码。
代码:

<?php echo $_GET['msg']; ?>
//正常URL
user.php?msg=henhao
//带JS的URL
user.php?msg=<script>alert(1)</script>
//恶意跳转URL
user.php?msg=<script>window.history.back(-1);</script>
 
解决方法:
输出过滤,php端输出到view的模板页面上的数据都需要经过过滤:

//输出过滤HTML JS标签
$var = str_replace(array('<iframe','<meta','<script'), '', $var); $var = str_replace(array('..',')','<','='), array('..',')','<','='), $var);  
$var = addslashes($var); 
 
CSRF跨站攻击
概念:CSRF跨站请求伪造,也被称成为“one click attack”或者session riding,www.xuhantao.com,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用。XSS利用站点内的信任用户,而CSRF则通过伪装来自受信任用户的请求来利用受信任的网站。与XSS攻击相比,CSRF攻击往往不大流行(因此对其进行防范的资源也相当稀少)和难以防范,所以被认为比XSS更具危险性。
危害:强迫受害者的浏览器向一个易受攻击的Web应用程序发送请求,最后达到攻击者所需要的操作行为。
例子:
<img src=“ /addfriend.php?id=123”/> 
1. 上面是一个图片的html标签,但是src中是一个添加id为123好友的新增好友链接。
2. 恶意用户可以将这段代码植入其它网站网页上面,甚至可以img设置为0,0,让用户不知不觉中点击这个链接,达到用户并不像加这个人好友,但是添加的目的。
3. 当很多人都无意加了id为123这个人为好友的时候,id为123的恶意用户就有权限来查看这些人的信息,甚至可以发送很多恶意的信息,达到恶意用户的目的。
解决方法:
1. /addfriend.php?id=123 使用POST方法会相对安全一点。
2. 采用类似随即码或者令牌的形式,让用户操作唯一性。 (每次用户登录网站随机生成一个token,存放在cookie中,用户的所有操作中都需要经过token验证)
 
flash安全问题
例子:
?clickthru=javascript:alert(1)
 
解决方法:
在网站根目录中,添加crossdomain.xml文件,这个文件主要是控制flash的域访问。
淘宝的:
<?xml version="1.0" ?>  
<cross-domain-policy>  
<allow-access-from domain="*.taobao.com" />  
<allow-access-from domain="*.taobao.net" />  
<allow-access-from domain="*.taobaocdn.com" />  
<allow-access-from domain="*.tbcdn.cn" />  
<allow-access-from domain="*.allyes.com" />  
</cross-domain-policy> 
sql注入安全问题
概念:所谓SQL注入,就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。
危害:
1. 查询数据库中敏感信息。
2. 绕过认证。
3. 添加、删除、修改服务器数据。
4. 拒绝服务。?id=(BENCHMARK(100000000, MD5(RAND()));
例子:
$sql = "SELECT name FROM users WHERE id = '". $_GET['id'] . "'";
当ID值为:1’or 1=’1  SQL语句(已测试可以注入):
SELECT name FROM users WHERE id = ‘1’ or 1=’1 ‘
说明:1=1的时候,条件语句WHEREOR之前的不起作用。 ‘的作用是组装SQL语句。
解决方法:
SQL组装的时候,对外部变量以及所有变量都进行过滤:
PHPWIND中,可以用sqlEscape、sqlImplode、sqlSingle、sqlMulti等函数过滤组装。过滤主要是一些’单引号这些可以破坏SQL组装的数据。

/**
 * SQL组装-私有SQL过滤
 * @param  string $val 过滤的值
 * @param  int    $iskey 0-过滤value值,1-过滤字段
 * @return string
 */
private function build_escape_single($val, $iskey = 0) {
    if ($iskey === 0) {
        if (is_numeric($val)) {
            return " '" . $val . "' ";
        } else {
            return " '" . addslashes(stripslashes($val)) . "' ";
        }
    } else {
        $val = str_replace(array('`', ' '), '', $val);
        return ' `'.addslashes(stripslashes($val)).'` ';
    }
}
 
 XML注入安全问题
概念:和SQL注入原理一样,XML是存储数据的地方,如果在查询或修改时,如果没有做转义,直接输入或输出数据,都将导致XML注入漏洞。攻击者可以修改XML数据格式,增加新的XML节点,对数据处理流程产生影响。
危害:
1. 攻击者可以新增XML节点
2. 破坏原来的XML结构,影响业务流程,甚至产生严重的错误。
例子:

相关文章
  • 没有相关文章
  • 徐汉涛(www.xuhantao.com) © 2024 版权所有 All Rights Reserved.
  • 部分内容来自网络,如有侵权请联系站长尽快处理 站长QQ:965898558(广告及站内业务受理) 网站备案号:蒙ICP备15000590号-1