gpt4 book ai didi

javascript - AngularJs如何防止<script>标签被输入

转载 作者:行者123 更新时间:2023-12-02 22:11:55 25 4
gpt4 key购买 nike

我允许用户使用以下命令输入文本:

<textarea ng-model="UserComment.text" rows="4" required maxlength="4000" />

现在允许用户输入

<script>alert('Hello world!');</script>

这将完全按照脚本标记输入的方式保存到我的数据库中(如果未过滤) - 这是极其危险的。我知道当我使用以下 ng-bind 渲染该输入时


<div class="user-comment-text">{{UserComment.text}}</div>

默认情况下它将被清理,脚本标签将使用 < 和 > 进行 HTML 编码,呈现为 &lt;&gt;因此脚本标签不会作为脚本执行。但是将这些标签保存在我的数据库中是危险的,所以我想过滤 <script>标记(以及任何其他危险输入)免受输入 - 最好的方法是什么

我希望有一个比正则表达式(ng-pattern)更好的解决方案,因为要实现多语言的正确解决方案几乎是不可能的。我当前的想法是在 Controller 中使用 C# 不区分大小写的正则表达式来清理服务器上的 <script>标签 - 但还有其他脚本问题 - 例如img onerror 事件和带有 javascript URL 的 href。我想先解决脚本元素,然后再担心其他元素。谢谢。

最佳答案

尝试正则表达式。

var rgx = /<\/?script>/gi;
var snippet = "<script>alert('alert1')</script> stuff <script>alert('alert2')</script>";
var result = snippet.replace(rgx, '[script]');

是一个非常简单的例子。预期输出为

alert('alert1') stuffalert('alert2')

您可以修改为[script][/script],而不是完全删除,这样您就不会发现有人试图恶意。您还可以检查 < 和 >

如上所述,清理所有内容,如果您的数据库是 SQL,则使用 SqlParameters。

关于javascript - AngularJs如何防止&lt;script&gt;标签被输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59530314/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com