【问题标题】:A PHP Function that verify code language一个验证代码语言的 PHP 函数
【发布时间】:2011-02-16 02:35:32
【问题描述】:

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

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

你怎么看?有没有办法做到这一点 ? 在哪里可以找到这种功能?

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

【问题讨论】:

  • 你如何验证?不看代码就无法回答
  • @Pekka 这对我来说似乎很清楚。用户输入假定的 HTML 和 CSS 代码。程序必须验证输入实际上是 HTML 和 CSS,并且不包含不是 HTML 或 CSS 的内容,包括 PHP 代码。
  • @Dan 但这并没有回答他正在使用什么函数来执行此操作 - 以及 PHP 代码或 SQL 注入的存在是否真的会成为一个问题跨度>
  • @Pekka 他没有验证这一点的功能。他问你是否知道他在哪里可以找到这种功能。
  • @Dan 他仍然没有提供足够的信息来给出有意义的答案 - 在推荐卫生方法之前,人们需要知道他将如何处理数据跨度>

标签: php html css forms verification


【解决方案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

【讨论】:

    【解决方案2】:

    对于一些原始的东西你可以使用正则表达式,但是应该注意使用解析器来完全耗尽所有的可能性。

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

    示例:http://regexr.com?2t3e5(将表达式中的 &amp;lt; 更改回 &lt; 并且它会起作用(由于某种原因,rexepr 将其更改为 html 格式))

    编辑

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

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

    【讨论】:

      【解决方案3】:

      SHJS syntax highlighter for Javascript 有带有正则表达式的文件 http://shjs.sourceforge.net/lang/ 用于突出显示的语言 - 您可以查看 SHJS 如何解析代码。

      【讨论】:

        【解决方案4】:

        HTMLPurifier 是清理 HTML 的推荐工具。幸运的是,它还包含 CSSTidy 并且还可以清理 CSS。

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

        您的问题基于错误的前提。虽然可以清理 HTML,但这并不能防止其他可利用性。 PHP“标签”最有可能被过滤掉。如果您正在做一些其他奇怪的事情(部分包含或评估内容),那并没有真正的帮助。
        只有谨慎使用适当的数据库转义函数,才能防止 SQL 漏洞利用。对此没有神奇的解决方案。

        【讨论】:

          【解决方案5】:

          是的。 htmlpurifier 是删除恶意脚本和验证 HTML 的好工具。 不要认为它是 CSS。 显然它也适用于 CSS。谢谢布里迪斯。

          【讨论】:

            【解决方案6】:

            好的,谢谢大家。

            实际上,我意识到我需要人工验证。用户可以发布 HTML + CSS,我可以在 PHP 中验证语言和语法是否正确,但这并不能避免人们发布 iframe、html 重定向或占据整个屏幕的大黑 div。

            :-)

            【讨论】:

            • 实际上,您可以很容易地挖出 iframe 和元标记。 “占据所有屏幕的大黑色 div”主要取决于您的设置/布局。在jsfiddle.net,他们通过将输出放入 iframe 来修复它。效果很好,不需要人工 ;-)
            猜你喜欢
            • 1970-01-01
            • 2011-06-08
            • 2016-05-22
            • 2020-03-06
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多