【问题标题】:How can I disable js in an input textbox?如何在输入文本框中禁用 js?
【发布时间】:2021-10-24 13:09:08
【问题描述】:

我有输入类型文本,当在输入字段<script> alert (1) </script> 中写入 js 时,它可以工作,是否可以在输入中禁用 js? 谢谢

<form action="" name="typing_and_press_form"  id="typing_and_press_form">
   <input id='typing_and_press' class="typing_and_press" type="text"
                               placeholder="<?php if($jobStrings)  echo $jobStrings['keyword_search']; ?>">
   <div class="tagsgroupkeyup"></div>
</form>

jquery:

jQuery('#typing_and_press_form').on('submit', function (event) {
    event.preventDefault();

    if (jQuery('#typing_and_press').val()){
       var enteredValue = jQuery('#typing_and_press').val();
       jQuery('.typing-press .tagsgroupkeyup').append('<div class="tagstyle"><span>' + enteredValue + '</span><span id="' + enteredValue + '" class="remove">X</span></div>');
       jQuery('#typing_and_press').val('');
       jQuery('#typing_and_press').text('');
    }
})

【问题讨论】:

  • 输入框不会自动插入和运行HTML;您需要显示其余相关代码。一般来说,您需要将其变成 DOM 树(通过将其设置为新创建的 div 的 innerHTML),然后在插入之前删除所有
  • 试试.. '+ escape(enteredValued) + '...MDN escape
  • 不需要id="' + enteredValue + '" - 你的“删除”按钮/图标不需要用户定义的ID,使用类来激活它。
  • @freedomn-m 非常感谢,它工作正常

标签: javascript html jquery validation input


【解决方案1】:

这被称为自我 xss 攻击。输入反映在页面上并执行 javascript 的位置。为了防止这种情况,您必须使用 innerText,或者您也可以通过在将输入显示到 DOM 之前检查输入中是否有任何 javascript 来解析输入文本。

在 Jquery 中,你可以使用.text() 方法。

Javascript 部分是:

jQuery('#typing_and_press_form').on('submit', function (event) {
  event.preventDefault();
  if(jQuery('#typing_and_press').val()){
    var enteredValue = jQuery('#typing_and_press').val();
    spanElem = jQuery('.tagsgroupkeyup').append('<div class="tagstyle"><span></span><span id="' + enteredValue + '" class="remove">X</span></div>');
    spanElem.find("span:first").text(enteredValue)
    jQuery('#typing_and_press').val('');
    jQuery('#typing_and_press').text('');
  }
})

【讨论】:

  • 不需要ID。使用 var newElement = $(html).appendTo('tagsgroupkeyup') 保留对新创建的 div 的引用 - 或者只是 $(html).appendTo(".tags..").find("&gt;span:first").text(enteredValue) (或者给它一个类来查找它)
  • 这比使用escape() (upvoted) 更干净/清晰
  • 谢谢@freedomn-m。我没想到。我已经编辑了帖子。
猜你喜欢
  • 2010-10-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-21
  • 2018-04-11
  • 1970-01-01
相关资源
最近更新 更多