Я создаю простое приложение для чата. Проблема, с которой я сталкиваюсь, заключается в том, что пользователи могут вставлять скрипты через чат. Очевидно, это не то, чего я хочу. A (упрощенная версия) мой код:JQuery чат добавляется <scripts>
<!doctype html>
<html>
<head>
<link rel="stylesheet" href="/stylesheets/style.css"/>
<link rel="stylesheet" href="//netdna.bootstrapcdn.com/bootstrap/3.0.2/css/bootstrap.min.css">
<link rel="stylesheet" href="//netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.min.css">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
<style>
body {
padding-top: 80px;
word-wrap: break-word;
}
</style>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular.min.js"></script>
</head>
<body ng-app="app">
<script src="/socket.io/socket.io.js"></script>
<script>
// on load of page
$(function() {
// when the client clicks SEND
$('#datasend').click(function() {
console.log('enviar data');
var message = $('#data').val();
$('#conversation').append('<b>me:</b> ' + message + '<br>');
$('#data').val('');
});
// when the client hits ENTER on their keyboard
$('#data').keypress(function(e) {
if (e.which == 13) {
$(this).blur();
$('#datasend').focus().click();
}
});
});
</script>
<script src="scripts/locate.js"></script>
<div class="container" ng-controller="userController">
<div class="row">
<div class="col-sm-12">
<div class="well">
<h3>
<span class="fa fa-comment"></span>
Chat</h3>
<div>
<div id="conversation"></div>
<input id="data" style="width:200px;"/>
<input type="button" id="datasend" value="send"/>
</div>
</div>
</div>
</div>
</div>
</body>
</html>
Например, если пользователь вводит этот текст:
<script> alert('big problem') </script>
Предупреждение выскакивает. Любые идеи о том, как это решить?
Заранее спасибо.
Я бы попытался преобразовать пунктуацию в соответствующие [HTML Escape Codes] (http://www.theukwebdesigncompany.com/articles/entity-escape-characters.php). – Feathercrown
Вам нужно либо запретить ввод HTML на вход, так и выпадающий HTML-код или оба. Если вы добавляете HTML-контент, используя 'text()' вместо 'append()', чтобы быстро избежать HTML –
Никогда '.append()' или '.html()' любые строки ввода пользователя или вы запрашиваете XSS проблемы. Использование '.text()' - лучший выбор. – CodingWithSpike