使用javascript清理客户端上的用户输入

时间:2016-11-25 14:37:28

标签: javascript jquery

我已经处理了服务器端的清理工作,可以正确处理任何不正确的输入文本,如<script>alert('hi')</script>。但是因为我也使用websocket传递数据,所以如果用户发送

,这部分就会被破坏
<script>alert('hi')</script>

我发现encodeURIComponent但与encodeURI混淆,哪一个用于客户端的xss处理?

2 个答案:

答案 0 :(得分:3)

对于XSS Sanitization,请查看Yahoo的xss-filters库或DOMPurify

这是一个使用DOMPurify的例子:

var input = document.getElementById('input'),
    result = document.getElementById('result'),
    button = document.getElementById('button').addEventListener('click', function(){
      // Sanitize
      var clean = DOMPurify.sanitize(input.value, {SAFE_FOR_TEMPLATES: true});

      result.innerHTML = clean;
      console.log(clean);
    });
<script src="https://cdnjs.cloudflare.com/ajax/libs/dompurify/0.8.4/purify.min.js"></script>

<input type="text" id="input"> 
<button id="button">Send</button>
<p id="result"></p>

答案 1 :(得分:0)

如果您使用的是HTML,则可以将每个字符转换为实体。

function sanitize(a) {
  var b = "";
  for (var i = 0; i < a.length; i++) {
    b += "&#x"+a.charCodeAt(i).toString(16)+";"
  }
  return b;
}
User Input:
<input type="textbox" id="box">
<input type="button" value="Sanitize to entities" onclick="document.getElementById('sanitizedfield').innerText=(sanitize(document.getElementById('box').value))"><pre id="sanitizedfield"></pre>