#javascript #html #node.js
#javascript #HTML #node.js
Вопрос:
Приведенная ниже функция хороша, но она не предотвращает такие, как XSS
НАПРИМЕР: <script>alert(test);</script>
Я хотел бы предотвратить такие «атаки», как эти, но также возвращать сообщение типа:
I tried to exploit this site, but failed!
;
Причина в том, что это для системы чата, которую я создаю.
function escapeHtml(unsafe) {
return unsafe
.replace(/amp;/g, "amp;amp;")
.replace(/</g, "amp;<")
.replace(/>/g, "amp;>")
.replace(/"/g, "amp;quot;")
.replace(/'/g, "amp;#039;");
}
Комментарии:
1. Это экранирующая функция. Это отлично предотвращает XSS (можете ли вы показать, как вы используете его там, где его нет?) путем рендеринга любого текста в виде содержимого html. Он делает только это и ничего больше, он не может отличить атаку XSS от содержимого, которое действительно содержит специальные символы. (Ничто не может, кроме, может быть, человека, поскольку нужно выяснить намерения отправителя).
2. @Bergi Я просто хочу предотвратить любые XSS / изменения на моей странице, но если они попытаются, это вернет имя пользователя и сообщение «Я пытался XSS этот сайт» и т.д….
3. Нет, это невозможно. Экранирование всегда не зависит от содержимого, оно позволяет использовать произвольные значения. То, что вы, похоже, ищете, — это различать допустимые и недопустимые значения, например, запрещая именам пользователей содержать какие-либо
$<>"'
символы. Но это уже не «escapeHTML».4. @Bergi Нет, я не это имел в виду, когда говорил это; Я имею в виду, например: Джонти сказал:
<script>alert(xss);</script>
Теперь, когда я это сказал, я бы хотел, чтобы вместо текста, известного как XSS, возвращалось сообщение типа: Джонти сказал:I just tried to XSS this page.
5. И не должно быть ничего плохого в том, что Джонти так говорит. На самом деле, Джонти только что сказал это в комментарии к StackOverflow, и StackOverflow не верит, что он хотел XSS кого-либо с этим.