600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > Atitit 防注入 sql参数编码法 目录 1.2. 提升可读性pg_escape_literal — 转

Atitit 防注入 sql参数编码法 目录 1.2. 提升可读性pg_escape_literal — 转

时间:2023-02-15 05:19:35

相关推荐

Atitit 防注入 sql参数编码法  目录 1.2. 提升可读性pg_escape_literal — 转

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

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

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。它很混乱,容易出错,而且因数据库扩展不同而存在差异。

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

缺点,必须要conn才可。。

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

说明

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()。

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

说明

pg_escape_string(string$data) :string

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

Note:

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

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

由于addslashes()不检测字符集,所以有宽字节注入风险,所以php中添加了这个函数。

这个函数本来是mysql的扩展,但是由于存在宽字节的问题,php基于mysql的扩展开发了此函数。

gbk宽字符漏洞导致的sql注入

/8611.html

/suihui...

mysql_real_escape_chars()是mysql_escape_chars()的替代用法。

与addslashes()相比,不仅会将' " NOL(ascii的0)转义,还会把r n进行转义。同时会检测数据编码。

按php官方的描述,此函数可以安全的用于mysql。

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

mysql_real_escape_string()防注入详解

此方法在php5.5后不被建议使用,在php7中废除。

参考:/q/10...

魔术引用 (推荐指数3)addslashes在防注入方面,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

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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。