Как я могу предотвратить XSS, инъекцию SQL, отправив запрос AJAX в Javascript без получения ошибок от брандмауэра моего веб-приложения? - PullRequest
0 голосов
/ 04 ноября 2019

Итак, у меня есть сайт сообщества, где пользователи могут задать вопрос.

На странице пользователь может ввести заголовок для своего вопроса. На входе он покажет пользователю похожие заголовки из базы данных via Ajax (jQuery).

Но если я попытаюсь применить xss-атаки или простое предупреждение ('hello xss'), мой брандмауэр веб-приложения обнаружит это и запретитменя. В бэкэнд-запросе я использую mysqli_real_escape_string и htmlspecialchars в качестве методов для предотвращения этого.

НО

На стороне клиента я пока не нашел решения, чтобы предотвратить отправку xss sql и всех других атак на отправкузаголовок для бэкэнда.

КАК МОЖНО ОСУЩЕСТВЛЯТЬ ЭТО?!

Мой код Javascript для отправки заголовка в бэкэнд-файл php находится здесь:

oninput="$(document).ready(function(){

                        $('#asnycLoadingTitles').html(load('https://www.prodigy-official.de/resources/php/ajax_request_methods.php', {
                            function: 'loadSimilarTitles',
                            title: document.getElementById('title').value
                       }));
                    });"

Мойкод на бэкэнде php:

if ($_POST['function'] == 'loadSimilarTitles'){
        $requested_title = mysqli_real_escape_string($db,htmlspecialchars(trim($_POST['title'])));

        if (empty($requested_title)) exit();

        $sql = "SELECT id,title FROM `user.questions` WHERE title LIKE '%$requested_title%' LIMIT 20";
        $result = mysqli_query($db,$sql);

        if (mysqli_num_rows($result) > 0){
          echo '<br><br>';
          echo '<h3>I found similar questions for you. Maybe there is something that already answers your question.</h3>';
        }

        while($row = mysqli_fetch_array($result)){

          echo '<br>';
          echo '<font size="5px"><a href="https://www.prodigy-official.de/punity/questions/show?question='.$row['id'].'">'.$row['title'] . '</a> Question Nr. ' . $row['id'] . '</font>';

        }
        if (mysqli_num_rows($result) > 0){
          echo '<br><br><br>';
        }
       }

Как я могу безопасно отправить данные на бэкэнд php, не будучи заблокированным брандмауэром моего веб-приложения (mod_security для веб-сервера apache ????)

...