2011-02-13 65 views
2

我有一个2 textareas表单;第一个允许用户发送HTML代码,第二个允许发送CSS代码。如果语言正确,我必须使用PHP函数进行验证。验证代码语言的PHP函数

如果语言是正确的,为了安全起见,我必须检查是否没有PHP代码或SQL注入或其他。

您认为如何?有没有办法做到这一点 ? 我在哪里可以找到这种功能?

“HTML Purifier”http://htmlpurifier.org/是一个很好的解决方案吗?

+0

你是怎么验证的?不可能在没有看到一些代码的情况下回答 – 2011-02-13 14:52:24

+2

@Pekka对我来说这似乎很清楚。用户输入假定的HTML和CSS代码。程序必须验证输入实际上是HTML和CSS,并且不包含非HTML或CSS的内容,包括PHP代码。 – 2011-02-13 14:55:09

+0

@Dan但他没有回答他正在使用什么函数来做到这一点 - 以及PHP代码或SQL注入的存在实际上是否会成为问题 – 2011-02-13 14:56:10

回答

0

是的。 htmlpurifier是一个很好的工具,可以清除恶意脚本并验证您的HTML。 不要以为它会做CSS。 显然它也适用于CSS。谢谢Briedis。

0

对于可以使用正则表达式的某些原语,但应该注意使用解析器来完全排除所有可能性。

/(<\?(?:php)?(.*)\?>)/i 

实施例:http://regexr.com?2t3e5(在表达式改变&lt;<,它会工作(由于某种原因,rexepr改变其到HTML格式))

EDIT

/(<\?(?:php)?(.*)(?:\?>|$))/i 

这可能会更好,所以他们不能在文档的末尾放置php(因为PHP实际上并不需要终止字符)

0

HTMLPurifier是推荐用于清理HTML的工具。幸运的是,它也包含CSSTidy,并且可以净化CSS。

......没有PHP代码或SQL注入等等。

你是基于错误的前提你的问题。虽然可以清除HTML,但这并不能防范其他漏洞攻击。 PHP“标签”最有可能被过滤掉。如果你正在做一些神秘的东西(包括-ING或部分EVAL-ING的内容),这是没有真正的帮助。
和SQL漏洞只能通过meticously使用适当的数据库逃生功能来防止。没有什么神奇的解决方案。

1

如果你有验证日期在将它们插入到数据库 - 那么你只需要到数据库插入之前使用mysql_real_escape_string()函数。

//Safe database insertion 
mysql_query("INSERT INTO table(column) VALUES(".mysql_real_escape_string($_POST['field']).")"); 

如果你想将数据输出到最终用户为纯文本 - 那么你必须用htmlspecialchars逃避所有的HTML字符敏感()。如果你想以HTML格式输出,你必须使用HTML Purify工具。

//Safe plain text output 
echo htmlspecialchars($data, ENT_QUOTES); 

//Safe HTML output 
$data = purifyHtml($data); //Or how it is spiecified in the purifier documentation 
echo $data; //Safe html output 
0

好的,谢谢大家。

实际上,我意识到我需要人工验证。用户可以发布HTML + CSS,我可以在PHP中验证语言的语法是否正确,但是它不会避免人们发布iframe,html重定向或大黑色的div来接受所有屏幕。

:-)