JSP JavaScript XSS预防-检查什么

dced5bon  于 2023-08-01  发布在  Java
关注(0)|答案(1)|浏览(80)

我正在尝试阻止表单上的XSS攻击。我读过following,但我不清楚如何实施他们的建议。
我想防止攻击,所以我需要检查username的值。它可以通过以下方式攻击,例如:

curl -X POST -d "username=%3C%2Fscript%3E%3Cscript%3Efunction()%7bqxsspbCegNO0%7d%3B%3C%2Fscript%3E&forgotUsernameBtn=1" https://xyz/mypage.do >> test.txt

字符串

问题:

我应该添加什么JavaScript来让它进行检查(我相信调用htmlEncodejsEscape函数)?
我有以下内容:

jsp

<script>
    function htmlEncode(str){
        return String(str).replace(/[^\w. ]/gi, function(c){
            return '&#'+c.charCodeAt(0)+';';
        });
    }
    function jsEscape(str){
        return String(str).replace(/[^\w. ]/gi, function(c){
            return '\\u'+('0000'+c.charCodeAt(0).toString(16)).slice(-4);
        });
    }
</script>

                        <html:form action="forgotUsername" styleId="loginFormBean" styleClass="margin-1rem-top">
                            <div>
                                <div class="form-floating field">
                                    <input autocomplete="off" pattern="[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$"
                                           type="text" id="username" name="username" required class="form-control"
                                           value="${loginForm.username}" placeholder="Email"/>
                                    <label for="username">Email</label>
                                    <span class="autoComplete-img">
                                        <img src="assets/images/envelope-gray.svg" alt="">
                                    </span>
                                </div>
                                <div class="actions margin-1rem-top text-center">
                                    <button type="submit" id="submitButton" name="forgotUsernameBtn"
                                            class="submit butn-blue butn-md butn"
                                            onclick = "sanitize();">
                                        Forgot Username
                                    </button>
                                </div>
                            </div>
                        </html:form>

qltillow

qltillow1#

我应该添加什么JavaScript来让它做检查

您需要防御XSS的地方是当用户输入被插入到代码(通常是HTML文档)中时。
例如,如果要在HTML文档中显示用户名,则可以使用JSP将用户输入转换为安全的HTML。
在表单提交之前尝试使用客户端JavaScript执行此操作是徒劳的,因为:

  • 它很容易被攻击者绕过(就像您问题中的curl示例一样!)
  • 在插入HTML文档之前或之前,可能会对用户名做各种各样的事情(例如插入数据库或电子邮件),并且编码使其对HTML安全将使其在其他上下文中看起来像垃圾。

相关问题