我想要得到的非常简单:我的网站上有一个文本框,可以使用html,当我按下“发送”按钮时,该文本框中的值将发送到网站。但是有时用户会访问该网站,编写html并忘记关闭该标签,例如,完全弄乱了我的网站。 为了解决此问题,我所需要的就是一个验证器,当单击该按钮时,它将检查所写的内容,并检查是否有不正确的内容,并提出一种解决方法来纠正html问题。 我见过像https://validator.w3.org/docs/api.html这样的平台可以完全满足我的需求,但是我可以在自己的网站上使用它吗?
我试图用Java脚本自己做一些事情,但这非常复杂并且存在很多问题。
可以请人帮我吗?
答案 0 :(得分:0)
第一件事。如果我未能指出接受您用户的原始HTML通常来说,不是一个好主意™。
不正确地执行此操作(这是正确执行的极其困难的任务),这会使您的网站和用户面临许多漏洞。您可以在https://html5sec.org/上查看它们的部分列表(我说是“部分”,因为它们仅列出“已知”攻击向量)。 a seemingly-unrelated, but definitely semi-related question有很多好的答案,我强烈建议您全部阅读。
“但是@Pete!”,我听到你在哭,“我的用户值得信赖。他们不会试图点击劫持我的其他用户,或者进行其他恶意或不愉快的事情!”
您可能会因为所有使用您的网站的人都不是恶意软件或will even be using a browser to submit HTML to your site(因此请不要忘记对服务器端进行验证和清除)而遭受欺骗。
再次,您可能不会因此而受骗,您的用户群只对网站提交安全的HTML感兴趣。也许您已经考虑并实施了防弹客户端和服务器端验证和清理例程。我不知道您的确切情况,也不会假装(尽管我知道这里涉及的概率不对您有利)
考虑到上述所有情况,如果您仍然坚持允许用户编写原始HTML并将其提交到您的网站,请考虑:
您还可以只将用户的HTML转换为DOM元素(允许浏览器将HTML解析为实际的DOM元素),然后将[解析的] HTML字符串取回:
window.addEventListener('load', function () {
var textarea = document.getElementById('unsafe-html');
var button = document.getElementById('get-unsafe-html');
var getUnsafeHtml = function getUnsafeHtml() {
var div = document.createElement('div');
div.innerHTML = textarea.value; // parses HTML to DOM elements
return div.innerHTML; // gets it back in a string form.
}
button.addEventListener('click', function (e) {
var unsafeHtml = getUnsafeHtml();
console.log(unsafeHtml);
e.preventDefault();
return false;
}, false);
}, false);
<textarea id="unsafe-html" rows="5">
<p>If you <strong>insist</strong>, <i>then</i> this technique can be used as well.</p>
</textarea>
<button id="get-unsafe-html">Get the HTML</button>
这将不确保标记是用户期望的方式,但是它将确保您没有不匹配的标记(因为标记将被自动关闭或删除) ,具体取决于浏览器)。