如何仅在提交的一个特定用户输入上使用 DOMPurify?

How to use DOMPurify just on one specific user input filed?

提问人:duje.je 提问时间:11/4/2022 最后编辑:imvain2duje.je 更新时间:11/4/2022 访问量:1139

问:

我需要演示 XSS 攻击以及如何防止它。我制作了一个简单的网络应用程序,询问用户他的名字和姓氏,并将“欢迎”与他的名字和姓氏一起打印出来。在使用 DOMPurify 防止 XSS 攻击之前,我能够在输入字段中编写脚本,并且 XSS 攻击成功。最后,我想做的是能够从姓名输入字段执行攻击并防止来自姓氏输入字段的攻击。这是我的代码:

function cleanData(userInput){
    return DOMPurify.sanitize(userInput);
}

function myFunction() {
    let name = document.querySelector("#name");
    let surname = document.querySelector("#surname");
    let message = document.querySelector("#message");

    const profileData = userInput(
        $(surname)
    );

    message.innerHTML = "Welcome " + name.value + surname.value;
} 
    <script src="https://cdnjs.cloudflare.com/ajax/libs/dompurify/2.4.0/purify.min.js"></script>
    <h1>Hi! What's your name?</h1>
    <input type="text" id="name" placeholder="name ...not sanitized " />
    <input
      type="text"
      id="surname"
      placeholder="surname ...sanitized "
    />
    <br />
    <br />
    <button onclick="myFunction()">Submit</button>
    <h1 id="message"></h1>

我会说我未能仅在姓氏输入字段上使用 DOMPurify,并且不知道如何解决。

JavaScript HTML 前端 XSS Dompurify

评论

0赞 imvain2 11/4/2022
我没有看到名为 userInput 的函数。这应该是点击事件处理程序中的 cleanData 吗?而且你不需要使用$(surname),你可以只传递姓氏

答:

0赞 Ibrahim Sharaf 11/4/2022 #1

传递给surnamecleanData

function cleanData(userInput){
    return DOMPurify.sanitize(userInput);
}

function myFunction() {
    let name = document.querySelector("#name");
    let surname = document.querySelector("#surname");

    message.innerHTML = "Welcome " + name.value + cleanData(surname.value);
}