Php 如何限制或限制用户可以在web表单(首选客户端)中输入的html标记?
有哪些好的选项可以限制允许用户在表单字段中输入的html标记的类型?我希望能够做到客户端(可能使用JavaScript),服务器端(如果对用户的浏览器来说太重的话)和两者的结合(如果合适的话) 实际上,我希望用户能够提交与Stackoverflow上设置的标记相同的数据,加上标准的MathML标记。表格必须接受UTF-8文本,包括亚洲表意文字等 在应用程序中,用户必须能够提交带有基本html标记的文本条目,并且这些条目必须能够以用户安全的方式向(可能不同的)用户显示正确呈现的html。我计划使用Php 如何限制或限制用户可以在web表单(首选客户端)中输入的html标记?,php,javascript,security,Php,Javascript,Security,有哪些好的选项可以限制允许用户在表单字段中输入的html标记的类型?我希望能够做到客户端(可能使用JavaScript),服务器端(如果对用户的浏览器来说太重的话)和两者的结合(如果合适的话) 实际上,我希望用户能够提交与Stackoverflow上设置的标记相同的数据,加上标准的MathML标记。表格必须接受UTF-8文本,包括亚洲表意文字等 在应用程序中,用户必须能够提交带有基本html标记的文本条目,并且这些条目必须能够以用户安全的方式向(可能不同的)用户显示正确呈现的html。我计划使用
htmlspecialchars()
和htmlspecialchars\u decode()
来保护我的数据库服务器端
非常感谢,
JDelage
PS:我搜索过但是找不到这个问题…
如果你想过滤输入的XSS攻击等等,考虑使用一个现有的类库。我自己还没有用过它,但它承诺了很多,受到了高度重视 HTML净化器是符合标准的 用HTML编写的HTML过滤器库 PHP。HTML净化器不仅会删除所有恶意 代码(更好地称为XSS)具有经过彻底审核的, 安全但允许的白名单, 它还将确保您的文档 符合标准,只有通过 全面了解W3C规范如果您熟悉正则表达式,可以这样做:
<?php
function parse($string)
{
//To stop unwanted HTML tags being used
$string = str_replace("<","<",$string); //Replace all < with the HTML equiv
$string = str_replace(">",">",$string); //Replace all > with the HTML equiv
$find = array(
"%\*\*\*(.+?)\*\*\*%s", //Search for ***any string here***
"%`(.+?)`%s", //Search for `any string here`
);
$replace = array(
"<b>\\1</b>", //Replace with <b>any string here</b>
"<span style=\"background-color: #DDDDDD\">\\1</span>" //Replace with <span style="background-color: #DDDDDD">any string here</span>
);
$string = preg_replace($find,$replace,$string); //Do the find and replace
return $string; //Return the output
}
echo parse("***Hello*** `There` <b>Friend</b>");
?>
产出:
你好
那里
朋友我认为这很容易使用,只需指定您允许的标记即可 有一段时间我也有类似的问题。有一些$%^&*)喜欢发表一些评论,比如alert('Hello')代码>或类似的东西。我累了,做了一个小函数,它帮助我只允许
或
标记正常查看消息。
我只是用PHP做的,但我想它可能会对你有所帮助
function eliminateTags($msg) {
$setBrakes = nl2br($msg);
$decodeHTML = htmlspecialchars_decode($setBrakes);
# Check PHP version
if(version_compare(PHP_VERSION, '5.2') == 1) {
$withoutTags = strip_tags($decodeHTML, "<br />");
} else {
$withoutTags = strip_tags($decodeHTML, "<br>");
}
return $withoutTags;
}
函数消除器tags($msg){
$setBrakes=nl2br($msg);
$decodeHTML=htmlspecialchars\u decode($setBrakes);
#检查PHP版本
如果(版本比较(PHP版本,'5.2')==1){
$withoutTags=strip_标签($decodeHTML,
);
}否则{
$withoutTags=strip_标签($decodeHTML,“
”);
}
返回$withoutTags;
}
在客户端进行反馈是个好主意,但您还需要在服务器端进行检查。试图插入恶意脚本的用户将能够绕过任何客户端检查,而这些正是您最希望防止在其中获得不需要的HTML的人。Duh。。。当然,你是对的。谢谢你!谢谢你的意见。这看起来有点复杂。我以前从未与图书馆合作过…@JDelage是的,进入图书馆需要一段时间,但我很确定这比自己开始清除所有潜在危险要容易得多。这很公平。另一个问题是向用户解释他们能做什么和不能做什么。我不想简单地说“您的代码是不允许的”。@JDelage您可以使用strip_tags()
()与allowed_tags
参数结合使用来进行初始筛选(如果检测到非法标记,则返回错误消息),然后运行HTML净化器。不确定这是否适用于所有情况,只是一个想法。