Javascript 是否可以从网页运行节点脚本?
我已经找了好几天了,但是找不到答案。 我想做以下工作:Javascript 是否可以从网页运行节点脚本?,javascript,node.js,apache,Javascript,Node.js,Apache,我已经找了好几天了,但是找不到答案。 我想做以下工作: 用户连接到editor.html(带有基本http身份验证的Apache2) 用户希望使用其用户/pass(与passwd中相同)在服务器上打开文件(比如/home/user1/myfile.txt) Node.js脚本从上面获得具有用户权限的startet,用户可以编辑文件 节点脚本将通过WebSocket和读/写文件处理连接 我认为最大的问题是不可能从网页在服务器上运行节点脚本。。。我不想涉及任何php/cgi脚本。。。只有Apache
您可能想考虑允许用户直接使用其服务器端帐户连接的安全性含义。也有许多可用的应用程序已经完成,您可能会考虑实现,而不是编写自己的所有需要正确嵌入的安全性。
让您的用户在没有任何身份验证的情况下获得静态Auth.HTML页面(通过Apache)。p> 让表单提交操作是一些auth.js(Node.js脚本)。此auth.js检查用户的身份验证是否成功。如果是这样,它将启动node.js服务器,在其上设置socket.io并将用户重定向到某个editor.html
在本例中,您可以注意到,存在基于node.js脚本的身份验证。如果您想要基本apache2,我可以向您推荐下一个场景: 服务器上有auth.html和editor.html页面。最后一个放置在/private
文件夹中,对该文件夹的直接访问被.htaccess拒绝。因此,当用户在auth.html中通过apache2身份验证时,他会得到这个auth.html,它是一个空文档,带有onload
事件处理程序,将AJAX发送到auth.js(Node.js脚本)。Node.js获取private/editor.html
并像/editor.html
一样将其发送给用户
在这种情况下,用户只有通过身份验证才能访问编辑器。在身份验证node.js服务器启动,socket.io设置完毕后,一切正常。我不想成为这个人,但是 这不是node的设计方式,它是为了使用事件循环而设计的,我建议让node为静态文件服务,可能使用apache作为代理,然后当有人请求某个页面时,做任何需要做的事情,如果确实必须生成子进程,请使用
child\u process.spawn
,至于用户的权限,我建议只传入一个代码,比如1=admin、2=user、3=guest,子进程可以根据需要执行操作。我找到了一个解决方案:
可以使用mod auth external为apache编写自定义身份验证程序:
启用基本身份验证后,Web服务器会将凭据传递给脚本/程序,这样就可以运行节点应用程序。WebSockets(或普通AJAX)可以轻松做到这一点。查看Socket.io。让用户在服务器上启动任意进程是确保系统有后门的最佳方法。不要这样做,相反,请描述通过让您的用户这样做,您实际想要实现什么。apache可以代理nodejs。不要使用命令行脚本,而是使用http auth将nodejs程序编写为一个简单的web应用程序。@Mike'Pomax'Kamermans它应该在本地服务器上运行,我需要一个编辑器,这样用户就可以在服务器上编辑他们的文件,而无需ssh,只需浏览器。我只想使用apache和node.js。节点服务器不应在开始时运行。我想在用户登录时使用用户权限启动它。我知道有适用于Apache的suEXEC,但据我所知,默认情况下它无法运行节点脚本…不,他们正在编辑什么,以便能够在服务器上以脚本的形式运行这些内容?我的问题是,我不想在开始时运行节点服务器。我也不想在用户连接时以root和chroot身份运行节点服务器。用户应登录网页,然后查看编辑器。。。在服务器端,当用户登录时,Node.js服务器与登录的用户一起获得startet。这确保了用户只能编辑自己的文件。。。我只是不知道当用户登录时如何启动服务器,因为需要启动节点服务器……您能解释一下为什么一开始不想运行节点,或者为什么不能使用php吗。您可以通过创建一个具有用户名+id的文件夹,并在请求之前检查该用户是否已通过身份验证,并且正在尝试访问路径中包含该用户名和id+某些前缀的文件,来确保用户只能编辑其文件。ie用户“john_smith”只能访问:/homes/sites/private/john_smith_439/file.txt中的文件。所有用户都将首先通过数据库身份验证,然后您可以在那里创建/添加额外权限等。谢谢,我将在本周末对此进行评估并报告!pwauth()可以根据passwd进行身份验证。最后我根据自己的需要修改了源代码。。。