• Atitit 防注入 sql参数编码法 目录 1.2. 提升可读性pg_escape_literal — 转义文字以插入文本字段 1 1.2.1. 说明 1 1.3. 推荐pg_escape_str


    Atitit 防注入 sql参数编码法

     

    目录

    1.2. 提升可读性pg_escape_literal — 转义文字以插入文本字段 1

    1.2.1. 说明 1

    1.3. 推荐pg_escape_string() 转义 text/char 数据类型的字符串 2

    1.3.1.   说明 2

    1.4. 2. mysql_real_escape_string() (推荐指数4) 2

    1.5. 魔术引用 (推荐指数3)addslashes 3

     

    预先处理法固然好,但是毕竟麻烦,调试不方便

     

     

     

          1. Escaping

    通过使用mysqli 扩展,你可以利用 mysqli_real_escape_string() 函数来 escape包含在 SQL 查询中的所有数据。PostgresSQL 的 pgsql 扩展提供 pg_escape_bytea()、 pg_escape_identifier()、 pg_escape_literal() 和 pg_escape_string() 函数



    基于以上原因,并不推荐使用 escaping。它可以用来救急,如果你用来抽象的数据库程序库不强制参数绑定就能进行 SQL 查询,可能就需要使用它。否则你应该避免使用 escape。它很混乱,容易出错,而且因数据库扩展不同而存在差异。

     

     

      1. 提升可读性pg_escape_literal  转义文字以插入文本字段

    缺点,必须要conn才可。。

     

    pg_escape_literal  转义文字以插入文本字段

        1. 说明

    pg_escape_literal ([ resource $connection ], string $data ):字符串

    pg_escape_literal()转义用于查询PostgreSQL数据库的文字。它以PostgreSQL格式返回转义文字。pg_escape_literal()在数据前后添加引号。用户不应添加引号。建议使用此函数而不是pg_escape_string()。如果列的类型是bytea,必须改用pg_escape_bytea()。对于转义标识符(例如表,字段名称),必须使用pg_escape_identifier()

     

     

      1. 推荐pg_escape_string() 转义 text/char 数据类型的字符串


        1. 说明

    pg_escape_string ( string $data ) : string

    pg_escape_string() 转义 text/char 数据类型的字符串,返回转义后的字符串。建议用此函数替代 addslashes()

    Note:

    本函数需要 PostgreSQL 7.2 或以上版本。

     

     

      1. 2. mysql_real_escape_string() (推荐指数4)


    由于addslashes()不检测字符集,所以有宽字节注入风险,所以php中添加了这个函数。
    这个函数本来是mysql的扩展,但是由于存在宽字节的问题,php基于mysql的扩展开发了此函数。

    gbk宽字符漏洞导致的sql注入
    https://www.91ri.org/8611.html
    http://www.cnblogs.com/suihui...

    mysql_real_escape_chars()是mysql_escape_chars()的替代用法。
    与addslashes()相比,不仅会将' " NOL(ascii的0)转义,还会把r n进行转义。同时会检测数据编码。
    按php官方的描述,此函数可以安全的用于mysql。

    此函数在使用时会使用于数据库连接(因为要检测字符集),并根据不同的字符集做不同的操作。如果当前连接不存在,刚会使用上一次的连接。

    mysql_real_escape_string()防注入详解
    此方法在php5.5后不被建议使用,在php7中废除。
    参考:https://segmentfault.com/q/10...

     

     

      1. 魔术引用 (推荐指数3)addslashes
    1.  
    2. 防注入方面,addslashes()可以防止掉大多数的注入,但是此函数并不会检查变量的编码,当使用例如中文gbk的时候,由于长度比较长,会将某些gbk编码解释成两 .
      addslashes()与stripslashes()是功能相反的函数。

    addslashes()用于对变量中的' " 和NULL添加斜杠,用于避免传入sql语句的参数格式错误,同时如果有人注入子查询,通过加可以将参数解释为内容,而非执行语句,避免被mysql执行。

    不过,addslashes()添加的只在php中使用,并不会写入mysql中。
    那么,tripslashes()的作用是将加了的php变量去掉,由于不会写入mysql中,所以从mysql查询出来的内容不需要再tripslashes()。

    在防注入方面,addslashes()可以防止掉大多数的注入,但是此函数并不会检查变量的编码,当使用例如中文gbk的时候,由于长度比较长 ,会将某些gbk编码解释成两个ascii编码,造成新的注入风险(俗称宽字节注入)。见下面2。

    如果从网页表单、php、mysql都使用utf8编码,则没有这个问题。
    基于此函数的风险,并不建议使用,推荐使用下面3中的方法。

     

    PostgreSQL 函数 « PHP Manual _ PHP 中文手册.html

  • 相关阅读:
    前端规范标准(一)
    node之旅(3) Express之我的第一个应用
    node之旅(2) hello wrold!
    node之旅(1) 安装NodeJS
    CSS3 基础知识
    博客转移公告
    博客主题更换留念
    网络流-费用流zkw算法
    网络流-最大流ISAP
    字符串总结-三大“自动机”
  • 原文地址:https://www.cnblogs.com/attilax/p/15196974.html
Copyright © 2020-2023  润新知