Soft_Job 板


LINE

※ 引述《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> <!-- ... //--> </script> </body> 那个 <!-- 与 //--> 很重要。 https://bit.ly/39U38Wz https://stackoverflow.com/questions/20942452/why-does-script-cause-a-dom-tree-break-on-the-browser 我讲一下当时在 stackoverflow 上问的问题 (我靠这题赚了不少分),我当时的想 法是: var a = <?= json_encode($data) ?>; 当 $data = "<!--<script>"; 时: php > echo json_encode("<!--<script>"); "<!--<script>" 所以会产生出这样的 html: <!DOCTYPE HTML> <html> <body> <script> var a = '<!--<script>'; </script> <p>Test</p> </body> </html> 但我发现上面这段程式码你看不到 <p>test</p> 这段,於是就跑上去问了。原因 是上面这段不是合法的 html5,所以跳入 fallback 所以被打出 XSS 了。 所以 https://github.com/laravelgems/blade-escape 这边在讲 Javascript Parameter 的部份给的范例也是有问题的: <script> var username = "@js($variable)"; </script> <a href="#" onclick="displayDialog('@js($title)');">Click</a> -- Resistance is futile. https://blog.gslin.org/ & <[email protected]> --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 122.116.104.21 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Soft_Job/M.1582441681.A.A7B.html
1F:推 jerryshadow: 推推 02/23 16:07
2F:推 Masakiad: 其实我想说的是现在大多前端rendering, 很少後端做了, 02/23 16:12
3F:→ Masakiad: 所以可能举js造成的比较实际 02/23 16:12
4F:→ y3k: XSS不熟我就不讲 SQL注入明显是开发时便宜行事造成的阿.. 02/23 16:39







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:Tech_Job站内搜寻

TOP