作者red0whale (red whale)
看板PHP
标题[请益] 使用MySQL除了注意这些之外…
时间Fri Nov 3 14:14:48 2017
我们在使用MySQL时都会注意SQL Injection和防止网页代码注入
也就是会使用addslashes和htmlspecialchars函数
在使用MySQL时除了要注意这两点之外
还有没有其他需要注意的?
另外,
在写上传档案的PHP程式时,
有时候为了防止使用者上传PHP档以攻击伺服器内部而会阻止以「.php」为副档名的档案
除此之外,是否还有其他须注意的地方?
谢谢
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 220.136.121.238
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/PHP/M.1509689691.A.10C.html
※ 编辑: red0whale (220.136.121.238), 11/03/2017 14:16:30
1F:→ dododavid006: 上传档案的部份建议是用白名单比较安全 不然就是档11/03 15:23
2F:→ dododavid006: 案不可以放在可以直接下载的到的地方 要有另一个11/03 15:24
3F:→ dododavid006: php 去拿档案给你下载 另外这个 php 又要注意不能有11/03 15:24
4F:→ dododavid006: 能使用 ../ 之类的漏洞 比较好的做法是每个档案给一11/03 15:25
5F:→ dododavid006: 个 id 用 id 去对应实际的档案 而不要在网址内有档11/03 15:26
6F:→ dododavid006: 案路径11/03 15:26
7F:推 GALINE: 不要用 addslashes 做 sql 跳脱(这东西对熟手没用)11/03 15:36
冒昧请教一下,
为什麽addslashes对SQL Injection无效?
如果我的PHP变数都嵌入在SQL语法的字串型态当中,
也就是像这样:
$str="SELECT aaa,bbb FROM tableName WHERE aaa='".addslashes($a)."' AND bbb='".
addslashes($b)."'";
亦即 addslashes只用在SQL语法字串型态里头 (两个单引号「'」之间)
那这样是否可以使用addslashes?
另外,怎麽说addslashes对防止老手骇客无效呢?
谢谢
8F:→ GALINE: 跳脱请用 mysql(i)_real_escape_string11/03 15:36
9F:→ GALINE: 当然最好是用 prepared statement 去 bind 变数11/03 15:37
10F:→ GALINE: 尽量不要自组SQL,虽然对老系统这有时等於是全部重写...11/03 15:37
11F:→ GALINE: 然後htmlspecialchars不该在存DB的时候做,是显示时才做11/03 15:38
12F:推 crossdunk: 我都不用addslashes而是用PDO加上prepared11/03 16:22
※ 编辑: red0whale (110.28.136.18), 11/03/2017 18:45:41
13F:推 banqhsia: 永远记得不要用直接使用者提供的任何东西,就算真的要 11/03 21:23
14F:→ banqhsia: 也一定要跳脱。上传的档案,直接用 hash 产生档名改名 11/03 21:23
15F:→ banqhsia: ,限制上传档案的类型,然後强制改副档名 11/03 21:23
16F:推 nacoyow: 使用PDO +1 11/03 21:25
17F:推 dou0228: PDO,写一个类似ActiveRecord 的 class 做这事情 11/03 22:30
18F:推 tkdmaf: 正确的使用PDO,你就没烦没恼了。 11/04 12:48
20F:推 cd99cd99: 推荐使用PDO 11/06 08:43
21F:→ MOONRAKER: 3DO 11/06 14:54
22F:推 tkdmaf: ↑这传说中的失败作耶!但也间接造就了ps 11/06 22:46
23F:→ MOONRAKER: 被发现了…没错!传说中的无敌大烂作 ;) 11/08 17:05