Как предотвратить XSS в PHP, когда нужно разобрать грязную уценку, чтобы очистить контент уценки - PullRequest
0 голосов
/ 05 августа 2020

Non Engli sh native.

Какой у меня код:

File create.blade.php

<textarea> dirty markdown content </textarea> 
<preview> marked.js parsed html </preview>
<!-- this is a markdown editor, it can parse markdown to html using marked.js-->
<!-- then show in preview -->
<!-- something like stackoverflow editor does -->
<!-- when user edit done. post dirty markdown data to BlogController@create -->

File edit.blade.php

<textarea> parsed clean markdown content from backend </textarea>
<preview> clean parsed html</preview>

File BlogController.php

<?php
// get editor data from create.blade.php
// parse markdown content to prevent XSS
// save cleaned markdown content to DB
function create() {}

// get clean markdown data from DB
// return cleaned markdown content to edit.blade.php
function edit() {}

Застрял на шаге

Я застрял на этом шаге: dirty markdown content <- разобрать PHP -> cleaned markdown content

Что я пробовал

Я пробовал: parsedown , commonmark HTMLPurifier Но я не смог разделить библиотеку. Например, обычный знак, это похоже на Dirty markdown content <--> Dirty AST tree <---> AST to HTML(with parse) Я думал, что шаг AST to HTML(with parse) мне так сложно разделить на части AST tree <--> parsed AST tree <--> Cleaned markdown content

И HTMLPurifier проанализирует весь контент, даже теги script, окруженные `` `: До

```html
some text
<script> some js code </script>
some text
```

После использования HTMLPurifier он возвращает

```html
some text
some text
```

теги скрипта исчезли.

Чего я ожидаю

Некоторые библиотеки, которые могут синтаксический анализ dirty markdown content на cleaned markdown content

ps: я использую laravel 7. *, помеченные. js, MySQL. pps: Спасибо за чтение и спасибо за любые предложения.

Обновлено

Я ожидаю: Пользователь редактирует грязную уценку -> clean dirty markdown -> cleaned markdown -> сохранить в БД -> вернуть очищенное содержимое уценки -> пользовательское редактирование -> ...

Но, возможно, есть другой способ выполнить эту работу: Пользователь редактирует грязную уценку -> CommonMark -> cleaned HTML -> HTML to Markdown -> сохранить в БД -> вернуть очищенное содержимое уценки -> пользовательское редактирование -> ...

...