我希望我的用户能够使用 Markdown 进行评论并避免 XSS。
正确的行动顺序是什么?
这是我对其工作原理的理解:
user input via HTML form using Markdown syntax
$Input = markdown(mysql_real_escape_string($_POST['userInput']));
insert $input into database
然后,我还需要使用 htmlspecialchars 吗?
mysql_real_escape_string用于避免 SQL INJECTION。因为它转义了 SQL。
一起使用 strip_tags()、preg_match() 和 htmlspecialchars() 可以避免 XSS
XSS 基于包含漏洞利用的 html 标签。例如 java 脚本中的脚本,或重定向,或在标签中打开文件。
strip_tags() 删除 html 标签。还有一个更有趣的函数叫做
htmlspecialchars() 用于防止 XSS。
防止sql注入攻击最重要的事情
因此,首先您应该验证数据,然后对其进行清理,最后使用 htmlspecialchars 对其进行转义。
转义应该是在将数据插入数据库之前做的最后一件事。运行markdown
,或此时其上的任何其他功能,为时已晚。
其次,HTML 转义和 Markdown 转换是一个显示问题,不应影响写入数据库的内容。在呈现 HTML 页面时执行这些功能,而不是之前。数据库应该包含原始降价,而不是 HTML 版本。