Задать вопрос
@User782
Кратко о себе

Безопасно ли так производить запись пользовательского текста в базу?

Отправляю текст так:
javascript
function send_p() {
var xhr = new XMLHttpRequest();
var post_text = encodeURIComponent(document.getElementById("post_text").value);
xhr.open("POST", "/sw/sa.php?go=send_p", true);
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xhr.send("post_text=" + post_text);
xhr.onreadystatechange = function() { 
      if (xhr.readyState == 4) { 
        if(xhr.status == 200) { 
           let postArr = JSON.parse(xhr.responseText);			
...
        }
      }
    }; 
}

PHP обработчик sa.php
<?
if($_GET['go'] == 'send_p'){
include "/loggedact.php";
}
elseif($_GET['go'] == 'reg'){
include "/act.php";
}
else {
die();
}
?>

Далее, сам PHP записи в базу loggedact.php:
if($logged) {
	if($_GET['go'] == 'send_p'){

		$post_text = addslashes($_POST['post_text']);

		// пропускаем, если симолов достаточно
		if(strlen($post_text) > 15) {

			$sth = $dbpdo->prepare("INSERT INTO `blogs` SET `text` = ?");
			$sth->execute(array($post_text));
			$insert_id = $dbpdo->lastInsertId();
			
			echo json_encode(array('1',$insert_id));
		}

		else {

		echo json_encode(array('2','Маленький текст'));

		}
	}

} else {
die();
}
  • Вопрос задан
  • 349 просмотров
Подписаться 3 Простой 2 комментария
Пригласить эксперта
Ответы на вопрос 2
@neol
$sth = $dbpdo->prepare("INSERT INTO `blogs` SET `text` = ?");

Этого достаточно для защиты от sql injection.

В приведённом коде нет проверки авторизации и защиты от CSRF.

$post_text = addslashes($_POST['post_text']);

Зачем это тут?

if(strlen($post_text) > 15) {

К безопасности это не относится, но лучше всё же mb_strlen.
Ответ написан
@66demon666
Сетевой админ, АТС-админ
А где htmlspecialchars и иже с ними?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы