Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/477.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有谁知道Javascript中有一个可靠的库/函数来清除用户输入_Javascript_Node.js_Xss - Fatal编程技术网

有谁知道Javascript中有一个可靠的库/函数来清除用户输入

有谁知道Javascript中有一个可靠的库/函数来清除用户输入,javascript,node.js,xss,Javascript,Node.js,Xss,你们知道Javascript中有一个强大的库/函数来清理用户输入吗 主要用于防止XSS攻击和排序 如果所述库可以选择允许某些标签等,这将是一个加号 编辑:我在后端使用node.js。这就是为什么我需要一个javascript库来完成这类事情 人们在这里推荐Google Caja的一部分: 但是我只是希望得到更多的选项。这相当于Javascript中的PHPstrip\u标签功能。在这种情况下很方便 我用的是 示例 var check = require('validator').check,

你们知道Javascript中有一个强大的库/函数来清理用户输入吗

主要用于防止XSS攻击和排序

如果所述库可以选择允许某些标签等,这将是一个加号

编辑:我在后端使用node.js。这就是为什么我需要一个javascript库来完成这类事情

人们在这里推荐Google Caja的一部分:


但是我只是希望得到更多的选项。

这相当于Javascript中的PHP
strip\u标签功能。在这种情况下很方便

我用的是

示例

var check = require('validator').check,
    sanitize = require('validator').sanitize

// Validate
check('test@email.com').len(6, 64).isEmail();       //Methods are chainable
check('abc').isInt();                               //Throws 'Invalid integer'
check('abc', 'Please enter a number').isInt();      //Throws 'Please enter a number'
check('abcdefghijklmnopzrtsuvqxyz').is(/^[a-z]+$/);

// Sanitize / Filter
var int = sanitize('0123').toInt();                  //123
var bool = sanitize('true').toBoolean();             //true
var str = sanitize(' \s\t\r hello \n').trim();      //'hello'
var str = sanitize('aaaaaaaaab').ltrim('a');        //'b'
var str = sanitize(large_input_str).xss();
var str = sanitize('&lt;a&gt;').entityDecode();     //'<a>'
var check=require('validator')。检查,
清理=需要(“验证器”)。清理
//证实
支票('test@email.comlen(6,64).isEmail()//方法是可链接的
检查('abc')。isInt()//抛出“无效整数”
勾选('abc','请输入一个数字')。isInt()//抛出“请输入一个数字”
检查('abcdefghijklmnopzrtsuvqxyz')。是(/^[a-z]+$/);
//消毒/过滤
var int=sanitize('0123').toInt()//123
var bool=sanitize('true').toBoolean()//真的
var str=sanitize('\s\t\r hello\n').trim();/'你好’
var str=sanitize('aaaaaab').ltrim('a');/'b'
var str=sanitize(大输入);
var str=sanitize('a')。entityDecode();/“”

为此,我使用了
domprify
,它是一个足够好和快速的库。下面的例子来自官方文件

DOMPurify.sanitize('<img src=x onerror=alert(1)//>'); // becomes <img src="x">

DOMPurify.sanitize('<svg><g/onload=alert(2)//<p>'); // becomes <svg><g></g></svg>

DOMPurify.sanitize('<p>abc<iframe/\/src=jAva&Tab;script:alert(3)>def'); // becomes <p>abcdef</p>

DOMPurify.sanitize('<math><mi//xlink:href="data:x,<script>alert(4)</script>">'); // becomes <math><mi></mi></math>

DOMPurify.sanitize('<TABLE><tr><td>HELLO</tr></TABL>'); // becomes <table><tbody><tr><td>HELLO</td></tr></tbody></table>

DOMPurify.sanitize('<UL><li><A HREF=//google.com>click</UL>'); // becomes <ul><li><a href="//google.com">click</a></li></ul> 
domprify.sanitize(“”);//变成
domprify.消毒(“”);//变成
domprify.sanitize('HELLO');//变成你好
domprify.消毒('

您可以通过以下URL找到更多信息。

我个人认为,输入清理应该出于语义原因,而不是安全原因。XSS类攻击家族实际上是一个输出问题,您需要“保护”不同的输出域以不同的方式存在。在输入时,如果不可能降低应用程序的功能,就无法真正解决这些安全威胁。这是一个很好的观点@Pointy-但您可能需要出于多种原因过滤用户输入。@amorhs-是的,我认为出于语义原因过滤输入是很好的-电话号码应该看起来像电话号码等。但有时没有很好的理由限制输入(如“评论”或“注释”字段)。也许客户有很好的理由包括“&”或“需要注意的是,从validator.js的v3开始,xss()方法已被弃用。Chris(validator.js的作者)现在建议人们使用谷歌的Caja图书馆。更多信息可以在这里找到: