首页 > 解决方案 > 在 Angular 2+ 中创建安全表单

问题描述

我想在 Angular2+ 中创建一个安全的表单,使用 sanitize 或类似的东西,但我尝试了它并且 sanitize 不适用于表单。

我想检测脚本和类似的东西。

我试过这个:

    let title = form.title;
    console.log("TITLE", title) // title that I enter in my input
    title = this._sanitizer.sanitize(SecurityContext.HTML, title);
    console.log("after title", title)

但它不像我想要的那样工作,因为如果我输入带有重音符号 (áéíóú) 或 ¿? 的单词,它会返回:

我想得到与我输入的数据相同的信息,但是如果我输入一个脚本,我可以检测到它不保存或不在我的输入中执行。

标签: angularinputangular2-formsunsafe

解决方案


您可以遵循一些方法来实现您正在尝试做的事情。sanitize 不会过滤您的输入数据,因为这不是它的用途。

1)您可以创建一个 PIPE,它只允许用户输入输入文本,例如某个字符。如果只是检查您键入的内容的 ascii 键是否在某个范围内(例如 48-122 包括所有数字和字母 Aa 到 Zz)。

2) 使用与第 1 点相同的逻辑,但不是创建 PIPE,而是创建一个函数,该函数根据需要返回字符串“sanitized”,或者在有一些错误字符时显示消息。

3) 这一点可能是题外话。但是,如果您必须将数据发送到网络服务器,请务必删除某些字符(例如 ',",!,=, IE: Injection)并使用后端语言的功能正确“清理”文本.

无论如何,默认情况下没有任何内容允许您仅键入某些字符或类似的内容。您必须编写一些代码。你没有写你真正想做的事情,但我建议你看看 Angular 的默认 PIPE,这对于执行各种操作非常有用。


推荐阅读