Ну если допустим мне нужно вывести ни текст, в который могли попасть хтмл или пхп теги, а логин и ид, то ХSS не должно быть или все таки есть возможность?
Предварительно логин проходит валидацию и хтмл или пхп теги попасть туда не могут, а данные при выводе проходят процедуру (очистки или валидации, или как вернее будет) с помощью htmlspecialchars()
Подсказали мне вот такой вариант работы в цикле при помощи подготовленного запроса:
$stmt = $base->prepare("SELECT * FROM `chat` ORDER BY id LIMIT 5");
$stmt->execute();
$data = $stmt->get_result()->fetch_all(MYSQLI_ASSOC);
foreach ($data as $row) {
echo $row['das'];
}
Но он не работает, то есть ни ошибок ни получение информации из бд - не происходит. Я почитал мануал по функциям и не смог в итоге разобраться с этим. Потому что перепробовав все варианты - результат был один и тот же.
А вот если работать с таким кодом:
// Переменные $start и $max используются, определяются выше (в ненужном здесь куске кода)
$q = mysqli_query($base, "SELECT * FROM `chat` ORDER BY `id` DESC LIMIT $start, $max");
echo '<div class="block">';
if($count){
while ($row = mysqli_fetch_array($q)) {
$sql = mysqli_query($base, "SELECT * FROM `profile` WHERE`id` = $row[uid]");
$fetch = mysqli_fetch_array($sql);
echo '<div style="padding: 5px">';
echo ''.$fetch['login'].' |'.filter_db_text($row['text']).'';
echo '</div>';
echo '<div class="link-line"></div>';
}}else{
echo '<div class="gl-obv">Сообщений нет</div>';
}
sim3x, переменную $max определяю я, еще в начале скрипта, это количество записей на странице. То есть, пользователь не имеет возможности ее изменения и соответственно не доберется для залития инъекции. Тоже самое и с переменно $start
sim3x, Если он захочется, то сделаю я примерно таким образом:
В начале я создам файл конфигурации (типа с настройками) setting.php (помещу его в папку profile) и буду там собирать данные хотелок пользователей. Но при этом я буду использовать подготовленный запрос.
А в данном коде, я изменю всего 1 строку, поменяю $max = 10 на $max = $p_setting['page_max'], то есть в принципе все решаемо...
или я в чем то не прав?
Вообще отклонились от темы.. В данном коде, есть или нету sql инъекции? Могу я им безопасно пользоваться или лучше не стоит?
sim3x, думаю меня простят за невнимательность, нашел косяк более углубившись в первый вариант с подготовленным запросом, ошибка простого синтаксиса, в место DESC писал DESK и постоянно получал ошибку синтаксиса из-за чего и отсеил этот вариант первоначально. Дико извиняюсь за ваше потраченное время.
Ты запутался в sql-инъекциях и выводе данных.
При записи надо всегда применять подг. запросы или иные обертки, препятствующие sql-инъекциям и порчи синтаксиса SQL.
При выводе данных из БД всегда надо применять htmlspecialchars, т.к. это предотвратит и XSS и "порчу" верстки, если попадется в тексте символ <, > или кавычки.
Перед записью в базу текст НЕ ДОЛЖЕН подвергаться никакой санитарной обработки.