标签: dompurify

是否需要消毒JSON?

我认为网络上的一个众所周知的最佳做法是不信任任何输入.这句话

"所有的投入都是邪恶的."

可能是输入验证方面引用最多的引用.现在,对于HTML,您可以使用DOMPurify等工具对其进行清理.

我的问题是,如果我有运行Express和身体解析器中间件的Node.js服务器来接收和解析JSON,我是否还需要运行任何清理?

我(也许天真?)的想法是JSON只是数据,没有代码,如果有人发送无效的JSON,身体解析器(JSON.parse()内部使用)无论如何都会失败,所以我知道我的应用程序将收到一个有效的JavaScript对象.只要我没有运行eval或调用函数,我应该没事,不应该吗?

我错过了什么吗?

javascript json sanitization node.js dompurify

19
推荐指数
2
解决办法
2万
查看次数

Next.js DOMPurify.sanitize() 显示 TypeError: dompurify__WEBPACK_IMPORTED_MODULE_6___default.a.sanitize is not a function

我使用DOMPurify.sanitize()insidedangerouslySetInnerHTML={{}}来显示innerHtml从数据库返回的。出于最初的目的,我在此页面上使用getServersideProps()with next-redux-wrapper

我安装了 dompurify: npm i -S dompurify,当前版本是:“^2.2.6”。

我的代码:

    import DOMPurify from 'dompurify';
    import { useSelector } from 'react-redux';
    import { END } from 'redux-saga';
    import wrapper from '../redux/storeSetup';

    const EmployeePage = () => {
    
        const blog = useSelector(state => state.data);

        const html_body = blog[0].body_html;
    
        const clean = DOMPurify.sanitize(html_body);
    
        return(
           <div className="mainContainer">
                <div dangerouslySetInnerHTML ={{ __html: clean }} />
                <ul>
                    {blog.map((item) => (
                        <li key={item.author}>
                            <span>{item.author}</span><br/>
                            <span>{item.title}</span>
                            <h4>{item.body_delta}</h4>
                            <p>{item.body_html}</p>
                            <p>{item.created_on}</p> …
Run Code Online (Sandbox Code Playgroud)

javascript next.js dompurify getserversideprops

8
推荐指数
3
解决办法
2467
查看次数

如何在前端js文件中安装,导入和使用DOMPurify?

这更像是一种“您能确认这是正确的”问题吗,因为我认为我在编写问题的过程中已解决了该问题,但希望对其他有些犹豫的人有所帮助实施DOMPurify

简洁版本

DOMPurify在前端js文件中像这样导入和使用是否安全/有效:

npm install dompurify --save

import DOMPurify from 'dompurify'; 

var clean = DOMPurify.sanitize('<img src=x onerror=alert(1)//>', {SAFE_FOR_JQUERY: true}); 
Run Code Online (Sandbox Code Playgroud)

详细版本

目前,我的主要前​​端js文件使用以下约定导入:

import ClipboardJS from 'clipboard';

// date-fns functions
import getYear from 'date-fns/get_year';
import getMonth from 'date-fns/get_month';
import getDaysInMonth from 'date-fns/get_days_in_month';
import startOfMonth from 'date-fns/start_of_month';
import getDay from 'date-fns/get_day';
import format from 'date-fns/format';

import Cookies from './js.cookie';
Run Code Online (Sandbox Code Playgroud)

我尝试了以下方法:

npm install dompurify --save

import DOMPurify from 'dompurify';

console.log(DOMPurify.sanitize('<img src=x onerror=alert(1)//>', {SAFE_FOR_JQUERY: true}));
console.log(DOMPurify.sanitize('<svg><g/onload=alert(2)//<p>', {SAFE_FOR_JQUERY: true}));
console.log(DOMPurify.sanitize('<p>abc<iframe/\/src=jAva&Tab;script:alert(3)>def', {SAFE_FOR_JQUERY: true}));
console.log(DOMPurify.sanitize('<math><mi//xlink:href="data:x,<script>alert(4)</script>">', …
Run Code Online (Sandbox Code Playgroud)

javascript sanitization input-sanitization dompurify

7
推荐指数
1
解决办法
2817
查看次数

如何允许“dompurify”中的 iframe 标记包括其所有属性

我想dompurify允许 iframe 标签,并添加iframe为例外 ( ADD_TAGS)。但这消除了它的一些属性。我希望所有属性都在那里。

<!doctype html>
<html>
    <head>
          <script src="https://cdnjs.cloudflare.com/ajax/libs/dompurify/1.0.3/purify.min.js"></script>    </head>
    <body>
        <!-- Our DIV to receive content -->
        <div id="sanitized"></div>

        <!-- Now let's sanitize that content -->
        <script>
            /* jshint globalstrict:true, multistr:true */
            /* global DOMPurify */
            'use strict';

            // Specify dirty HTML
            var dirty = '<iframe allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen="" frameborder="0" height="315" scrolling="no" src="https://www.youtube.com/embed/vJG698U2Mvo" width="560"></iframe>';

            var config = { ADD_TAGS: ['iframe'], KEEP_CONTENT: false }

            // Clean HTML string and write …
Run Code Online (Sandbox Code Playgroud)

javascript dompurify

6
推荐指数
2
解决办法
8468
查看次数

NodeJS 需要一个文件中的所有模块,好的做法?

我想知道从设计或安全的角度来看,是否有任何缺点,拥有一个包含requires()我需要的所有模块的文件,然后将它们导出。这将使我无需跟踪每个文件中的所有模块。

例子:

// my_requires.js
const bodyParser = require('body-parser')
const parseForm = bodyParser.urlencoded({extended: false})

const DOMPurify = require('dompurify');
const {JSDOM} = require('jsdom');

const jwt = require('jsonwebtoken');
const passport = require('passport');
require('../config/passport')(passport)

module.exports = {
    bodyParser: bodyParser,
    parseForm: parseForm,
    jwt: jwt,
    passport: passport,
    bcrypt: bcrypt
}
Run Code Online (Sandbox Code Playgroud)

然后在我需要它们的任何文件中,我只需要

const reqs = require('my_requires.js')
Run Code Online (Sandbox Code Playgroud)

我不知道使用这样的构造是否有任何缺点。由于模块都加载到全局空间中,我看不出我的方法有任何缺点?

javascript node.js node-modules dompurify

2
推荐指数
1
解决办法
2048
查看次数