2017-07-21 8 views
1

Je voudrais faire un simple compilateur en ligne, qui prend le code du navigateur, l'envoie au serveur, le compile, et retourne au résultat de l'exécution du navigateur.Comment faire un compilateur en ligne en toute sécurité?

J'ai peur que quelqu'un va exécuter format C:\ à partir de code ou quelque chose comme ça. Y a-t-il un moyen de l'empêcher?

P.S. Je regarde la solution de Windows.

Répondre

1

Vous devez utiliser plusieurs couches de fonctionnalités du système d'exploitation. Exécutez le compilateur et le programme résultant dans une machine virtuelle pare-feu en tant qu'utilisateur limité avec un accès restreint au système d'exploitation.

Si tout se passe bien, le système d'exploitation de la machine virtuelle les empêchera de formater le lecteur. Mais si ce n'est pas le cas et qu'ils ont accès à l'administrateur, le fait qu'il s'agisse d'une machine virtuelle jetable avec des limites de l'extérieur signifie que l'accès administrateur ne vaut pas vraiment grand-chose. Vous pouvez simplement réimager la VM et recommencer à zéro. (En fait, vous pourriez vouloir l'image même quand tout est normal juste par mesure de précaution.)

Avec les deux couches de protection, vous devriez être assez sûr.

Maintenant, dans la VM, je ferais probablement fonctionner Linux quand même. Même si le serveur est une boîte Windows, à l'intérieur de la machine virtuelle, vous pouvez installer une distribution linux minimale et utiliser setrlimit et ainsi de réduire la mémoire de processus et le temps CPU. Mais si vous voulez aussi Windows, les objets de travail https://msdn.microsoft.com/en-us/library/ms684161(VS.85).aspx atteignent des limites de ressources similaires. Assurez-vous simplement que votre compte d'utilisateur qui exécute le compilateur et le programme a également des permissions sévèrement restreintes sur le disque (sur chaque os). Bien sûr, vous pouvez également faire de telles choses sur le système d'exploitation hôte sans la machine virtuelle ... mais si quelque chose ne va pas, vous ne pouvez pas facilement abandonner et remplacer le tout, et l'accès administrateur peut contourner votre autre pare-feu ou restrictions de cpu. J'utiliserais certainement les deux couches.

BTW, malgré la couche vm, n'oubliez pas de toujours utiliser XSRF et XSS, comme n'importe quel autre formulaire Web.