Este artículo voy a dejarlo aquí colgado por un comentario que un usuario ha dejado en otra entrada de esta página. En aquel artículo hablaba sobre como reproducir fácilmente archivos m3u8 en tu página web. En el comentario el usuario preguntaba sobre como esconder la url de las emisiones m3u8. El objetivo que buscaría sería que otros usuarios no puedan, o al menos tengan más complicado obtener estas direcciones. Evidentemente esto es complicado. Utilizando programas para ello se va a poder obtener fácilmente. Utilizando el código que voy a dejar aquí colocado, podremos evitar que son un simple navegador los usuarios puedan sacar nuestras URL de streaming utilizando el botón derecho del ratón o algunas combinaciones de teclas.
Protege tu código fuente deshabilitando combinaciones de teclas y el menú contextual del ratón en tu página web
Como digo, con el código javascript que voy a compartir en este artículo, nos va a proteger (de primeras) el código fuente de nuestra página. Si alguien quiere ver el código funcionando, puede hacerlo en este enlace.
Para empezar, hay que decir que en la página que queremos proteger, solo tendremos que añadir un script para cargar el archivo .js. En este ejemplo, dentro de la página de muestra he cargado el siguiente script:
<script language='JavaScript' src='hotkey.js'></script>
Este script, como todo el mundo sabe (o debería saber) irá dentro del head de nuestra página. Como se puede ver en el código, el archivo en el que vamos a guardar el código para deshabilitar combinaciones de teclas y el menú contextual del ratón, se llama hotkey.js. Este lo guardo en la misma carpeta en la que tengo el archivo en el que cargo el script.
Bueno, pues ahora aquí va el código para bloquear el acceso al código fuente.
Archivo JavaScript para eliminar el acceso al código fuente de la página web
Como he dicho, el archivo en mi caso lo llamo hotkey.js, y el código es el siguiente (tal cual):
document.oncontextmenu = function(){return false;} shortcut = { all_shortcuts: {}, add: function (e, t, n) { var r = { type: "keydown", propagate: !1, disable_in_input: !1, target: document, keycode: !1 }; if (n) for (var i in r) "undefined" == typeof n[i] && (n[i] = r[i]); else n = r; r = n.target, "string" == typeof n.target && (r = document.getElementById(n.target)), e = e.toLowerCase(), i = function (r) { r = r || window.event; if (n.disable_in_input) { var i; r.target ? i = r.target : r.srcElement && (i = r.srcElement), 3 == i.nodeType && (i = i.parentNode); if ("INPUT" == i.tagName || "TEXTAREA" == i.tagName) return } r.keyCode ? code = r.keyCode : r.which && (code = r.which), i = String.fromCharCode(code).toLowerCase(), 188 == code && (i = ","), 190 == code && (i = "."); var s = e.split("+"), o = 0, u = { "`": "~", 1: "!", 2: "@", 3: "#", 4: "$", 5: "%", 6: "^", 7: "&", 8: "*", 9: "(", 0: ")", "-": "_", "=": "+", ";": ":", "'": '"', ",": "<", ".": ">", "/": "?", "\\": "|" }, f = { esc: 27, escape: 27, tab: 9, space: 32, "return": 13, enter: 13, backspace: 8, scrolllock: 145, scroll_lock: 145, scroll: 145, capslock: 20, caps_lock: 20, caps: 20, numlock: 144, num_lock: 144, num: 144, pause: 19, "break": 19, insert: 45, home: 36, "delete": 46, end: 35, pageup: 33, page_up: 33, pu: 33, pagedown: 34, page_down: 34, pd: 34, left: 37, up: 38, right: 39, down: 40, f1: 112, f2: 113, f3: 114, f4: 115, f5: 116, f6: 117, f7: 118, f8: 119, f9: 120, f10: 121, f11: 122, f12: 123 }, l = !1, c = !1, h = !1, p = !1, d = !1, v = !1, m = !1, y = !1; r.ctrlKey && (p = !0), r.shiftKey && (c = !0), r.altKey && (v = !0), r.metaKey && (y = !0); for (var b = 0; k = s[b], b < s.length; b++) "ctrl" == k || "control" == k ? (o++, h = !0) : "shift" == k ? (o++, l = !0) : "alt" == k ? (o++, d = !0) : "meta" == k ? (o++, m = !0) : 1 < k.length ? f[k] == code && o++ : n.keycode ? n.keycode == code && o++ : i == k ? o++ : u[i] && r.shiftKey && (i = u[i], i == k && o++); if (o == s.length && p == h && c == l && v == d && y == m && (t(r), !n.propagate)) return r.cancelBubble = !0, r.returnValue = !1, r.stopPropagation && (r.stopPropagation(), r.preventDefault()), !1 }, this.all_shortcuts[e] = { callback: i, target: r, event: n.type }, r.addEventListener ? r.addEventListener(n.type, i, !1) : r.attachEvent ? r.attachEvent("on" + n.type, i) : r["on" + n.type] = i }, remove: function (e) { var e = e.toLowerCase(), t = this.all_shortcuts[e]; delete this.all_shortcuts[e]; if (t) { var e = t.event, n = t.target, t = t.callback; n.detachEvent ? n.detachEvent("on" + e, t) : n.removeEventListener ? n.removeEventListener(e, t, !1) : n["on" + e] = !1 } } }, shortcut.add("Ctrl+U",function(){ alert('Se siente\nLa combinación CTRL+U no está disponible. Se creativo!') }), shortcut.add("Meta+Alt+U",function(){ alert('Se siente\nCommand+Option+U no disponible. Se creativo!') }), shortcut.add("Ctrl+C",function(){ alert('Lo siento\nNunca dupliques este artículo...') }), shortcut.add("Meta+C",function(){ alert('Lo siemto\nNunca dupliques este artículo...') });
Como digo, esta es solo una opción básica de como proteger «mínimamente» el código fuente de una página web. Con lo que podremos evitar que con un navegador un usuario pueda acceder de primeras a la URL de carga de un streaming. Pero es evidente que utilizando programas a mayores esta protección no será efectiva.
2 Comentarios
¿Cómo desactiva los menús desplegables? En Firefox 59 -> Herramientas -Desarrollador Web -> Código fuente de la página.
Hola. Los menús desplegables del navegador, no veo factible hacerlo XD. Como creo que escribí en el artículo, esto no es un método infalible. Solo disuade a unos pocos. Salu2 y gracias por el comentario.