我打算为学生们整理一个快速的网页,教他们JavaScript编程.在这个页面上,我想给他们一个文本框,允许他们运行JavaScript,以便他们可以看到工作语言的动态特性.但是,我很清楚在用户输入上使用eval()通常是一个非常糟糕的主意.我发布这样的页面会带来什么样的安全风险?我应采取哪些措施来减轻这些风险?
您正在承担的安全风险是,您正在从用户那里获取输入并在您网站上的脚本环境中运行它.想象一下,如果你是一个恶意破解者,无论出于何种原因都有完全访问权限来修改网站上运行的JavaScript.您可以执行在您的域上运行的JavaScript能够执行的任何操作(包括cookie窃取,XSS,偷渡式恶意软件等).
您唯一可以现实地做的是减轻风险,而不是eval()用户提供的内容.试图消毒输入只允许"安全"输入是注定要失败的; 几乎不可能定义什么是安全的,甚至更难以实际限制脚本(假设潜在的攻击者有一种解释性的语言来掩盖他的意图).
请注意,如果这是出于教育目的,那么一种方法就是确保所有安全漏洞无关紧要.糟糕的JavaScript无法破坏您的服务器或从您的银行帐户中窃取资金(当然,除非它在您银行的网页上).如果托管该网页的网站没有值得窃取的cookie或会话,并且学生知道它只是一种教育资源,我认为没有什么可担心的.大多数攻击依赖于访问存储在您域中的机密信息,或欺骗域访问者以某种方式放弃机密信息(网络钓鱼攻击或类似攻击).为了您的目的,我认为您会没事 - 只是不要在"真实"的网站上这样做.
它将在自己的机器上运行.只是不要让他们保存字符串并发送给其他人 - 也不要通过GET将值放在URL中(以便可以通过电子邮件发送).