Comprehensive Protection For Dynamically-Typed Languages: Avoiding The Pitfalls Of Language-Level Sandboxing