#javascript #html
#javascript #HTML
Вопрос:
Я пытаюсь создать свой собственный чат с использованием npm, в его нынешнем виде все работает гладко, но моя главная проблема — внедрение SQL или ввод людей в HTML, потому что он будет анализировать все, что введено. Форма не используется, а кнопка ввода, текстовое поле и вывод управляются JavaScript. ниже приведена часть HTML, на которую я ссылаюсь.
<div id="wrapper">
<div class="bubble-container" ></div>
</div>
<div id="sendCtrls">
<input type="text" placeholder="Your message here" id="text">
<button id="myBtn">Send</button>
</div>
Это мой PHP-файл, который содержит весь JavaScript.
<script>
// -------------------------
//var name = prompt('What is your name?');
var name = "<?php echo $_SESSION['username']; ?>";
var bubbles = 1;
var maxBubbles = 60;
var sock = new WebSocket("ws://localhost:5001");
sock.onopen = function() {
var bubble = $("#wrapper");
bubble = $('<div class="bubble-container"><span class="bubble"><div class="bubble-text">
<p><b>*** Welcome ' name ' to the chat!</b><br>
These are the rules, please read amp; follow them.<br>
1. Be polite in chat.<br>
2. Keep personal disputes out of chat.<br>
3. No advertising.<br>
4. Do not ask to become a Moderator.
</p></div></div>');
myChat(bubble);
sock.send(JSON.stringify({
type: "name",
data: name
}));
}
// --------------------------
var maxLength = 200; // chars per bubble
sock.onmessage = function(event){
console.log(event);
var json = JSON.parse(event.data);
var bubble = $('<div class="bubble-container"><span class="bubble"><div class="bubble-text"><p><strong>' json.name ':</strong> ' json.data '</p></div></div>');
myChat(bubble);
}
// ---------------------------
document.querySelector('button').onclick = function (){
var text = document.getElementById('text').value;
if(text != "") {
if (text.length < maxLength) {
document.getElementById('text').value='';
sock.send(JSON.stringify({
type: "message",
data: text
}));
var bubble = $('<div class="bubble-container"><span class="bubble"><div class="bubble-text"><p><strong>' name ':</strong> ' text '</p></div></div>');
myChat(bubble);
}else{
var bubble = $('<div class="bubble-container"><span class="bubble"><div class="bubble-text"><p>*** Your message exceeds ' maxLength ' characters!</p></div></div>');
myChat(bubble);
};
}
};
// --------------------------
var input = document.getElementById("text");
input.addEventListener("keyup", function(event) {
if (event.keyCode === 13) {
event.preventDefault();
document.getElementById("myBtn").click();
}
});
// --------------------------
function myChat(bubble){
$("#msgText").val("");
$(".bubble-container:last").after(bubble);
if (bubbles >= maxBubbles) {
var first = $(".bubble-container:first").remove();
bubbles--;
}
bubbles ;
$('.bubble-container').show(250, function showNext() {
if (!($(this).is(":visible"))) {
bubbles ;
}
$(this).next(".bubble-container").show(250, showNext);
$("#wrapper").scrollTop(9999999);
});
};
</script>
Я не включил серверный скрипт, который также является просто JavaScript, но может сделать это при необходимости. PHP не взаимодействует с тем, что отправляется. 2-й вопрос: нужно ли мне писать что-либо на стороне сервера для защиты от SQL-инъекций или для предотвращения ввода HTML?
Комментарии:
1. какой механизм базы данных вы используете? Вам нужно будет использовать параметризованные запросы для любой базы данных, которую вы используете.
2. Я использую xampp, это информация о БД: Apache / 2.4.41 (Win64) OpenSSL / 1.1.1c PHP / 7.4.1 Версия клиента базы данных: libmysql — mysqlnd 7.4.1 кстати, ни один чат не сохраняется ни в какой базе данных, он удаляется после 60 сообщений.
3. «Я пытаюсь создать свой собственный чат с помощью npm» — NPM — это менеджер пакетов. Вы имеете в виду NodeJS?
4. да, это то, что я использую
5. Я настоятельно рекомендую прочитать читы OWASP по внедрению и другие статьи этой группы.