我正在构建一个网站来说明常见的应用程序漏洞,例如 SQL 注入。我在用AngularJS and 高亮.js创建交互式示例。
如何让 AngularJS 和highlight.js 都更新我的代码片段?
Example
这把小提琴 http://jsfiddle.net/Good_man/Lv56y2yy/6/演示如何输入' OR 1=1 --
如果用户的输入未经验证或清理,则电子邮件字段中的可能会更改查询的预期行为。
SELECT * FROM dbo.Users WHERE Email='{{email}}' AND Password='{{password}}'
当用户输入电子邮件地址和密码时,Angular 会更新查询。但是,语法突出显示不会更新。
SELECT * FROM dbo.Users WHERE Email='[email protected] /cdn-cgi/l/email-protection' AND Password=''
我尝试重新初始化 hljs,但是当我执行 Angular 时,会停止更新查询。
hljs.initHighlighting.called = false;
hljs.initHighlighting();
应用
<script>
var app = angular.module("app", ['hljs']);
app.controller("controller", function($scope) {
$scope.email = "[email protected] /cdn-cgi/l/email-protection";
$scope.password = "";
})
</script>
<div ng-app="app" ng-controller="controller">
<div>
<div class="row">
<div class="col-sm-4">Email
<input type="text" class="form-control" ng-model="email">
</div>
<div class="col-sm-4">Password
<input type="text" class="form-control" ng-model="password">
</div>
</div>
<br>
<div hljs include="'compile-me'" compile="true" language="sql"></div>
</div>
<script type="text/ng-template" id="compile-me">
SELECT * FROM dbo.Users WHERE Email = '{{email}}'
AND Password = '{{password}}'
</script>
</div>