嗨,我打算让用户能够提交一些代码段(php,java,javascript C++等等......他们想要的任何我的意思)。使用户能够提交代码在php中替换什么?
因此,任何人都可以建议我最好的做法,以使其对我的网站安全吗? :))
我的意思是哪些标签/字符/字符串在PHP中一次逃脱提交代码字符串?
嗨,我打算让用户能够提交一些代码段(php,java,javascript C++等等......他们想要的任何我的意思)。使用户能够提交代码在php中替换什么?
因此,任何人都可以建议我最好的做法,以使其对我的网站安全吗? :))
我的意思是哪些标签/字符/字符串在PHP中一次逃脱提交代码字符串?
在查询中使用占位符,您甚至不必转义输入。 占位符,绑定和准备好的语句绝对是首选的方法。
对于超过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得到逃脱。
如果您的目的是在屏幕上显示代码,则在将其存储到数据库(如果您打算存储它)之前,不需要转义或替换任何东西。当然,这并不适用于通过诸如mysql_real_escape_string()
之类的数据库(或您的RDBMS的等效清理例程)转义数据库插入。这一步仍然是绝对必要的。
当显示的代码,只要确定:
你不通过eval()
或系统调用评估任何提交的代码。
将代码显示回浏览器时,请使用htmlspecialchars()
进行转义。永远不要显示它,否则你会引入跨站点脚本漏洞。
如果你不打算自动运行它,你不需要转义任何东西(除了通常的mysql卫生)。
我不是专家(我昨天才知道这件事),但至少对于HTML,你可以尝试使用htmlentities(请看this)。 使用htmlentities转换了某些内容后,它会变成纯文本,所以如果在浏览器中打开它,您将看到标签和所有内容(例如,它将写入<a href="blah blah">
),如果将其写入日志或其他内容,然后打开在基于文本的编辑器中,您将会使用一些代表html实体的符号和标签。
如果您需要转换回来,您可以使用html_entity_decode函数,我想,但我会下注猜测并假定您不需要转换回来。
对于其他语言,我不知道你应该做什么。
你想用该代码做什么?你会运行它吗? – kapa
显示...对不起:P – sbaaaang