Вот как я это сделал, для вас, ребята из Express. Похоже, он очень хорошо работал в сочетании с экспресс-дезинфицирующим средством.
app.js
import expressSanitizer from 'express-sanitizer'
app.use(expressSanitizer())
app.post('/route', async (req, res) => {
const title = req.body.article.title
const content = req.sanitize(req.body.article.content)
// Do stuff with content
})
new.ejs
<head>
<link href="https://cdn.quilljs.com/1.3.2/quill.snow.css" rel="stylesheet">
</head>
...
<form action="/route" method="POST">
<input type="text" name="article[title]" placeholder="Enter Title">
<div id="editor"></div>
<input type="submit" onclick="return quillContents()" />
</form>
...
<script src="https://cdn.quilljs.com/1.3.2/quill.js"></script>
<script>
const quill = new Quill('#editor', {
theme: 'snow'
})
const quillContents = () => {
const form = document.forms[0]
const editor = document.createElement('input')
editor.type = 'hidden'
editor.name = 'article[content]'
editor.value = document.querySelector('.ql-editor').innerHTML
form.appendChild(editor)
return form.submit()
}
</script>
express-sanitizer
(https://www.npmjs.com/package/express-sanitizer)
document.forms
(https://developer.mozilla.org/en-US/docs/Web/API/Document/forms)
В моем представлении есть только одна форма, поэтому я использовал document.forms[0]
, но если у вас их несколько или вы можете расширить свое представление в будущем, чтобы иметь несколько форм, ознакомьтесь со ссылкой MDN.
Что мы здесь делаем, так это создаем скрытый ввод формы, которому мы назначаем содержимое Quill Div, а затем мы незаконно отправляем форму и передаем ее через нашу функцию, чтобы завершить ее.
Теперь, чтобы протестировать его, напишите сообщение с <script>alert()</script>
, и вам не придется беспокоиться об использовании инъекций.
Вот и все, что нужно сделать.
person
agm1984
schedule
04.09.2017