我使用Rich Text Editor接受来自客户端的HTML内容的输入数据。
在服务器端,我使用基于PHP的服务器并清理传入的数据。
是否有内置的PHP功能,它保留了HTML代码并删除了Javascript for XSS + SQL注入代码的存在。
答案 0 :(得分:5)
据我所知,没有这种内置功能。</ p>
来自http://php.net/manual/en/filter.filters.sanitize.php的清理过滤器不会涵盖您的请求。您可以查看http://php.net/manual/en/book.filter.php,但没有设置过滤器来过滤HTML。
我知道你不要求外部图书馆,但我认为这可以帮助你解决你所面临的问题:http://htmlpurifier.org/
答案 1 :(得分:3)
关于SQL注入,您应该使用PDO with prepared statements。这样,您发送到数据库的字符串与您想要的字符串完全相同,您不需要使用它并逃脱。
关于XSS - 您应该XSS Filter Evasion Cheat Sheet查看owasp。你可以在这里做几件事 - 你可以只允许已知的标签(并使用php的strip_tags功能去掉所有其余的标签)。请注意,它不会阻止元素属性中的XSS(检查备忘单链接) 您可以使用DOMDocument解析器遍历所有元素并检查其属性并保留/删除您想要的任何内容。 Check this了解更多信息。
如果你使用一些已知的框架,他们中的大多数都有内置的xss过滤器,所以你可以使用它(或take look代码并从中学习。)
答案 2 :(得分:3)
使用预准备语句和参数化查询来阻止SQL injections。
如果您只想在数据库中保存某些标记,可以使用strip_tags()。它允许您允许某些HTML标记。但是,注释和PHP标记将始终被剥离。
$(document).ready(function () {
$('.progress .circle').removeClass().addClass('circle');
$('.progress .bar').removeClass().addClass('bar');
$(".circle").first().addClass("active");
var timer = setInterval(increment, 1000);
function increment() {
$(".circle:not(.done)").first().removeClass("active").addClass("done").children(":first-child").html("✓");
$(".circle:not(.done)").first().addClass("active");
$(".circle.done").next().addClass("done");
if ($(".active").find(".title").text() == $("tr:last-child").find("span").text()) {
clearInterval(timer);
}
}
});