2011-10-04 50 views
1

嗨,我打算让用户能够提交一些代码段(php,java,javascript C++等等......他们想要的任何我的意思)。使用户能够提交代码在php中替换什么?

因此,任何人都可以建议我最好的做法,以使其对我的网站安全吗? :))

我的意思是哪些标签/字符/字符串在PHP中一次逃脱提交代码字符串?

+0

你想用该代码做什么?你会运行它吗? – kapa

+0

显示...对不起:P – sbaaaang

回答

1

在查询中使用占位符,您甚至不必转义输入。 占位符,绑定和准备好的语句绝对是首选的方法。

对于超过1个查询的任何事情都会更快,因为您可以重复使用这些句柄并更改输入。

更安全。该字符串不会被查询...解释过。你存储的是你得到的。

我需要知道更多的关于您的目标SQL给相关的例子,但这里的一些链接:

PDO风格结合:http://docs.php.net/pdo.prepared-statements

mysqli的风格结合:http://docs.php.net/manual/en/mysqli-stmt.bind-param.php

当你读回来,用

htmlspecialchars($string, ENT_QUOTES); 

ENT_QUOTES选项确保单曲和双曲otes得到逃脱。

+0

对不起,我忘了我正在使用Mongo DB – sbaaaang

+0

无论如何,我检查真的很好,谢谢:)) – sbaaaang

7

如果您的目的是在屏幕上显示代码,则在将其存储到数据库(如果您打算存储它)之前,不需要转义或替换任何东西。当然,这并不适用于通过诸如mysql_real_escape_string()之类的数据库(或您的RDBMS的等效清理例程)转义数据库插入。这一步仍然是绝对必要的。

当显示的代码,只要确定:

  1. 你不通过eval()或系统调用评估任何提交的代码。

  2. 将代码显示回浏览器时,请使用htmlspecialchars()进行转义。永远不要显示它,否则你会引入跨站点脚本漏洞。

1

如果你不打算自动运行它,你不需要转义任何东西(除了通常的mysql卫生)。

1

我不是专家(我昨天才知道这件事),但至少对于HTML,你可以尝试使用htmlentities(请看this)。 使用htmlentities转换了某些内容后,它会变成纯文本,所以如果在浏览器中打开它,您将看到标签和所有内容(例如,它将写入<a href="blah blah">),如果将其写入日志或其他内容,然后打开在基于文本的编辑器中,您将会使用一些代表html实体的符号和标签。

如果您需要转换回来,您可以使用html_entity_decode函数,我想,但我会下注猜测并假定您不需要转换回来。

对于其他语言,我不知道你应该做什么。