作者foxzgerald (O⊥M)
看板PHP
标题Re: [请益] mysql_num_rows()
时间Fri May 11 00:46:02 2007
※ 引述《JYHuang (夏天到了,冷不起来了说)》之铭言:
: ※ 引述《foxzgerald (O⊥M)》之铭言:
: : 另外. $sql 字串最好先脱序. 特别是这些查询字串中的一些变数来自於使用者输入
: : ($_POST 或是 $_GET 之类的) .. 如果不先脱序. 很容易被 sql injection 攻击
: : 相关资讯请看 mysql-query 的第二个范例.或者 google :)
: 请问,所谓的脱序是不是泛指将$sql中的特殊符号(例如 ' )
: 做注记处理 (变成\')。
: 使人无法透过url和表单中的变数去中断并改变mysql_query($sql)的执行结果?
: 透过mysql_escape_string就可以阻绝掉基本的sql injection吗?
基本上是的。更安全的做法是依照各种变数的属性制定不同的 filter,
以身分证字号为例:常用的检测方式便能够避免 SQL injection。
因此,若使用者输入的资料天生具备可过滤的特徵,最好先过滤掉,
而 mysql_real_escape_string() 则当作辅助措施。
mysql_real_escape_string() 除了具有阻绝 sql injection的效果外,
由於 binary 档案(如:图档、影片...etc)可能含有脱序字元,
因此直接 insert 进 db 时,小则会发生错误、大则引起灾难,
此点也必须要注意。
另外要注意的是:PHP.ini 中 magic_quotes_gpc/magic_quotes_sybase 是否开起。
因为这两个会自动脱序....有时会因为这功能的美意帮了倒忙
http://tw.php.net/manual/en/function.mysql-real-escape-string.php
此点在『Example 1402. A "Best Practice" query』中有详细范例。
: 另外,我还是看不太懂mysql_escape_string和mysql_real_escape_string的差异
: 是差别在mysql_real_escape_string可以引用参照字吗?
: 谢谢 :)
这两个应该是一样的东西,我刚去查
http://tw.php.net/manual/en/function.mysql-escape-string.php
的
ChangeLog 发现:
Version Description
-----------------------------------------------------------------------
4.3.0 This function became deprecated, do not use this function.
Instead, use mysql_real_escape_string().
mysql_escape_string() 已经不建议使用;建议改用 mysql_real_escape_string()
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.119.199.121
※ 编辑: foxzgerald 来自: 140.119.199.121 (05/11 00:48)