Как защитить форму комментариев WordPress от запущенных скриптов?

Недавно мы разработали собственную тему для нашего веб-сайта Wordpress, и я использовал собственную систему комментариев Wordpress, код которой выглядит примерно так, как показано ниже. вопрос в том, как мы можем защитить форму комментариев от атаки xss? кажется, что такие скрипты, как <script>alert('hi');</script>, запускаются просто в форме комментариев. Есть идеи?

Спасибо.

<section>
    <main>
        <div class = "comment-area">

            <h2 class = "comment-title -pb-20">
            number of comments:  <span><?php echo get_comments_number(); ?></span>           
            </h2>     
                

            <div  class = "comment-form">
                <h3>Insert you comment here please.</h3>
                <?php 
                    $arg = array(
                        'title_reply'          => '',
                        'comment_notes_before' => '',
                        'label_submit'         => 'submmit',
                        
                    );
                    comment_form($arg);  
                ?>
            </div>

           <?php if (have_comments()) : ?>
                <div class = "comment-list">
                    <h1>all comments</h1>  
                    <ul>
                        <?php

                            $args = array(
                                'style'             => 'ul',
                                'callback'          => null,
                                'end-callback'      => null,
                                'type'              => 'comment',
                                'reply_text'        => 'reply',
                                'page'              => '',
                                'per_page'          => '',
                                'avatar_size'       => 32,
                                'reverse_top_level' => true,    
                                'reverse_children'  => '',
                                'format'            => 'html5',
                                'echo'              => true,
                            ); 


                            wp_list_comments($args);
                        ?>
                    </ul> 
                </div>

                <div class = "comments-pagination">
                    <?php if (get_comment_pages_count() > 1  &&  get_option('page_comments')) : ?>
                    <div>
                        <?php previous_comments_link('prev');  ?>
                    </div> 
                    <div>
                        <?php next_comments_link('next');  ?>
                    </div> 
                    <?php  endif; ?>
                    
                </div><!-- .comments-pagination -->


            <?php endif; ?>


        </div>
    </main>
</section>

Разве вы не можете упростить процесс и просто использовать тег <input>, подключающий событие change для фильтрации <script> или всех тегов html?

Ethicist 13.12.2020 14:21

Я понятия не имею, как это сделать!

zahra_oveyedzade 13.12.2020 14:49

Спасибо за ваш ответ. но я думаю, что этот метод является защитой на стороне клиента. как насчет серверной части? есть ли способ сделать это с помощью PHP-кода?

zahra_oveyedzade 13.12.2020 15:25

Ах да, конечно, это намного лучше и на самом деле безопасно (защита на стороне клиента дает ложное чувство безопасности), так что вы можете просто делать то, что вы делаете на стороне клиента при проверке данных, но вместо этого делать это на стороне сервера прямо перед тем, как решить, хотите ли вы хотите обработать данные. Например, если у вас могут быть регулярные выражения в PHP, то не сопоставляйте никакие распознанные теги — или только теги <script>, если хотите. Обновлено: см. решение здесь: stackoverflow.com/questions/7891771/… и посмотрите, будет ли оно полезным.

Ethicist 13.12.2020 15:27

Да, ты прав. но вы знаете, не похоже, что система комментариев по умолчанию в WordPress дает мне какой-либо HTML-тег, чтобы я мог его проверить, очистить. вот почему я задал этот вопрос. Кстати, большое спасибо за вашу помощь и время, братан.

zahra_oveyedzade 13.12.2020 15:32

Вы отправляете свой ввод на сервер или что-то еще, прежде чем разрешать публичное отображение опубликованных комментариев? Я говорю, что вы должны очистить его там и решить прямо там (на стороне сервера), следует ли его публиковать или нет.

Ethicist 13.12.2020 15:33

хм, может быть, в Wordpress есть фильтр, я должен найти его. спасибо за подсказку

zahra_oveyedzade 13.12.2020 15:36
SQL Injection: Атаки в реальной жизни и как это вредит бизнесу
SQL Injection: Атаки в реальной жизни и как это вредит бизнесу
Один-единственный вредоносный запрос может нанести ущерб вашему бизнесу. Уязвимости вашего кода могут привести к:
1
7
102
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий
add_filter( 'comment_text', 'sanitize_comment' );
function sanitize_comment( $comment_text ) {
    $comment_text = sanitize_text_field($comment_text);
    return $comment_text;
}

Другие вопросы по теме