[闲聊] 2017.W22 - SQL Injection

楼主: CMJ0121 (请多指教!!)   2017-05-30 21:41:04
2017.W22 - SQL Injection
> 都 2017 年了 SQL Injection 还没绝种
## 前言 ##
前几天突然发现有不少登入次数 <20 的帐号在看这个版的文章
来源 IP 都很固定 突然想到...
如果在文章内容中塞入 SQL 语法 那些爬虫会不会就中标了...
## 内容 ##
SQL Injection[0] 是一种发生在数据库层的安全漏洞
主要是在执行 SQL 语法时夹带了意料之外的参数 导致执行了预期以外的结果
一个有年代可以被 SQL Injection 语法可以是
SELECT count(*) from account WHERE user = '$USER' and password = '$PASSWORD';
预期透过使用者填入的 USER 与 PASSWORD 参数来判断使用者输入的内容是否正确 (借由回传非 0 值)
显而易见的 在 2017 年的现在这种写法应该是已经不存在了
原因在于透过没有被过滤的输入值 (像是 PASSWORD 输入成 1' OR '1' = '1)
就可以无视密码是否正确而成功登入...
同样的 假设网络爬虫为了搜寻本网页的内容 并找出所有的超连结[1]
可能的做法会是先用正规表示法找到所有 http:// 或 https:// 开头的内容
并且塞入到 DB 当中 这样可能的写法会是...
1. 先用 http[s]?://\S+ 来找到所有的超连结
2. 透过 INSERT INTO ptt.hyperlink (board, link) VALUES ('NewSecurity', '$LINK')
透过没有过滤的 LINK 参数 就可以被一个恶意的超连结导致 Table 被删除
(当然前提是爬虫会处理将 %20 转回成空白)
不过在重新提醒:
SQL Injection 会发生的主要原因 在于信任 User 输入的内容而直接带入到 SQL 语法中
透过正确的过滤 与正确使用第三方套件 可以避免 SQL Injection 发生在 2017 的现在
[0]: https://zh.wikipedia.org/wiki/SQL%E8%B3%87%E6%96%99%E9%9A%B1%E7%A2%BC%E6%94%BB%E6%93%8A
[1]: https://zh.wikipedia.org/zh-tw/%E8%B6%85%E9%80%A3%E7%B5%90
作者: liangh (天地不容客)   2017-05-31 07:40:00
看完这篇 mo就异常终止 呃。。。。。
楼主: CMJ0121 (请多指教!!)   2017-05-31 08:27:00
楼上是认真的吗.... 那一定要研究 mo 了 XDQQ 我在 iPhone 上试过 moptt / guest 没事情
作者: FeiYao (资工系主任尧尧在此)   2017-05-31 11:59:00
好猛喔
作者: FireGenie ( **十六周年志庆**)   2017-05-31 22:32:00
想推这个... https://xkcd.com/327/
作者: Debian (Debian)   2017-06-01 10:48:00
推荐文章。
作者: holishing   2017-06-08 10:51:00
push
作者: hmj (= 王杰 疯子 卖到缺货 =)   2017-06-12 08:33:00
作者: PTTCATKING (怀念美国猫王)   2017-06-15 12:53:00
参数化查询就避掉的低阶技术,怎反应最热烈,唉..
作者: Peruheru (还在想)   2017-06-21 17:52:00
因为门槛最低呀,可以自己试而且立竿见影
作者: skycat2216 (skycat2216)   2017-08-12 10:10:00
我用Mo Ptt没事R

Links booklink

Contact Us: admin [ a t ] ucptt.com