Php 用户提交代码演示区的安全预防措施和技术
也许这真的不可行。但基本上,我一直在开发一个片段共享网站,我希望它有一个“现场演示区” 例如,您正在浏览一些代码片段并单击“演示”按钮。弹出一个新窗口,执行web代码 我知道这样做会带来无数的安全风险——XSS、标签、恶意软件/硬盘下载、pr0n等等 社区将能够标记那些明显淘气的提交,但显然有些会被忽略(而且,在许多情况下,必须有人成为受害者才能发现提交的任何讨厌的东西) 所以我需要知道: 在安全方面,我应该做些什么来确保用户可以提交代码,但不能在异地运行或执行恶意代码? 供您参考,我的网站是由PHP使用CodeIgniter提供动力的Php 用户提交代码演示区的安全预防措施和技术,php,javascript,security,codeigniter,xss,Php,Javascript,Security,Codeigniter,Xss,也许这真的不可行。但基本上,我一直在开发一个片段共享网站,我希望它有一个“现场演示区” 例如,您正在浏览一些代码片段并单击“演示”按钮。弹出一个新窗口,执行web代码 我知道这样做会带来无数的安全风险——XSS、标签、恶意软件/硬盘下载、pr0n等等 社区将能够标记那些明显淘气的提交,但显然有些会被忽略(而且,在许多情况下,必须有人成为受害者才能发现提交的任何讨厌的东西) 所以我需要知道: 在安全方面,我应该做些什么来确保用户可以提交代码,但不能在异地运行或执行恶意代码? 供您参考,我的网站是由
杰克正如弗兰克所指出的,如果你想保持高水平的安全性,请使用白名单技术。这当然是有代价的(可能限制太多,难以实现) 另一种方法是开发黑名单技术。i、 e.只允许未触发任何铃声的代码。这更容易,因为您必须指定更少的内容,但它不会捕获新的漏洞 这两种技术在网络上都有大量可用的信息 依靠CodeIgniters安全功能(XSS过滤等)不会让您走得很远,因为大多数代码片段都不允许通过 无论你做什么,你都必须记住: 不要认为恶意代码只是为了伤害你网站的访问者。它还可以通过解析器/代码检查器危害服务器。例如,假设Alice上传了snippet foo。Alice故意编写代码段,以便解析器将其标记为恶意代码段,因为XSS攻击。假设您的解析器还使用恶意代码段更新数据库,以便进一步调查。爱丽丝知道这一点。除了利用XSS漏洞之外,Alice还在代码段中注入了一些SQL代码,因此当您将代码段插入数据库时,它会做各种各样的坏事 如果你真的是偏执狂,你可以有一个独立的服务器,它的唯一责任就是检查代码片段。因此,在WCS中,只有低风险的服务器会受到损害,并且您(希望)有足够的时间来修复/审核这种情况 希望这有帮助 供您参考,我的网站是由PHP使用CodeIgniter提供动力的 对不起,杰克,如果你认为这一点都不重要,那么你要理解这个问题的任何有效答案还有很长的路要走——更不用说能够区分无效的答案了 您创建的任何沙箱都将阻止有人攻击您的机器或您的客户,这些沙箱的限制性将使您的客户除了“打印”之外无法做更多的事情 您需要在定制的chroot服务器上运行suhosin的CLI版本,并且为每个脚本维护单独的环境是完全不切实际的
C.假设您只允许使用javascript代码,那么您应该执行以下操作-
除了Java之外,我不知道如何保护它。dotnet可能有一个类似的概念,但我怀疑你能否以类似的方式对PHP代码片段进行沙箱处理。你不能将PHP列入白名单或黑名单,它就是不起作用。如果您列出了我可以使用的命令列表,或阻止我使用恶意功能,那么什么是阻止我编写的命令:
$a = 'mai';
{$a .'l'}('somebody@important.com', 'You suck', 'A dodgy message sent from your server');
您不能将PHP列入白名单或黑名单。这些代码片段将完全是Javascript吗?如果您想要真正的安全性,您必须开发一种技术,用于将您知道是“安全”的代码列入白名单。