Re: [讨论] 为什么SQL注入和XSS漏洞会这么泛滥?

楼主: DarkKiller (System hacked)   2020-02-23 15:07:55
※ 引述《DarkKiller (System hacked)》之铭言:
: 推 Masakiad: 举例过时了吧?php很少人这样写了 02/23 14:20
拿最红的 Laravel 来讲好了。
因为 Laravel 的 Blade 不有支援这些特殊的 escape,你必须知道这些概念后才
能自己写 extension/plugin 产生正确的 escape。
: 1. htmlspecialchars($data) 或是 htmlentities($data)。
这是标准版,Blade 的默认值。
: 2. htmlspecialchars($data) 或是 htmlentities($data)。
这也是标准版,double quote 里面的东西要 escape 是常忘的项目。
: 3. htmlspecialchars(urlencode($data)) 或是 urlencode($data)。
这边处理的例子是 "+",只用 htmlspecialchars() 会导致 "+" 没有被 escape,
而传入变量里会变成 " " (空白),这边要用 urlencode() 才会正确的被 escape
,但因为放到 html 里面,所以要用 htmlspecialchars() 包起来。
另外因为 urlencode() 会处理 htmlspecialchars() 的五个特殊字符:
php > echo urlencode("\"'&<>");
%22%27%26%3C%3E
所以这边会说 htmlspecialchars() 可以省略。
用 Blade 的人需要“另外安装套件”来处理:
https://github.com/laravelgems/blade-escape
: 4. htmlspecialchars(json_encode($data))。
如果 3. 可以理解,这个就比较简单。
不管是 array 还是 object,包起来以后用 json_encode() 打包,然后因为放到
html 里面,所以过一次 htmlspecialchars()。
然后上面提到的 https://github.com/laravelgems/blade-escape 在这边没办法
用,因为程式码只能处理字串:
https://github.com/laravelgems/blade-escape/blob/master/src/Providers/BladeEscapeServiceProvider.php
https://github.com/laravelgems/escape/blob/master/src/HTML.php
: 5. json_encode($data)。
这个是里面最复杂的,也因为学到这个 XSS 技巧后,之后我写 html js 的 best
practice 都一定是:
<!doctype html>
<body>
<script>
<!
作者: jerryshadow   2020-02-23 16:07:00
推推
作者: Masakiad (Masaki)   2020-02-23 16:12:00
其实我想说的是现在大多前端rendering, 很少后端做了,所以可能举js造成的比较实际
作者: y3k (激流を制するは静水)   2020-02-23 16:39:00
XSS不熟我就不讲 SQL注入明显是开发时便宜行事造成的阿..

Links booklink

Contact Us: admin [ a t ] ucptt.com