Wenn Sie }!{
in Ihre JavaScript-Konsole in Chrome einfügen, erhalten Sie false
.
Warum bekommen wir keinen Fehler?
Der Grund für dieses Verhalten liegt darin, dass Chrome alles, was Sie in die Konsole eingeben, mit einem anderen Code umschließt.
Der Code, mit dem es umbrochen wird, ist wie folgt:
%Vor% Die Eingabe von }!{
schließt die Codeblock-Klammer und erstellt am Ende ein neues (negiertes) Objekt.
Wie Sie selbst in der Konsole sehen können, gibt !{}
false
zurück.
Ich habe einen ziemlich langen Untersuchungsprozess durchlaufen, um die Antwort darauf zu finden, meine ursprünglichen Kommentare sind unter
erhaltenUrsprüngliche Antwort:
Nur eine Theorie; Ich stelle mir vor, dass der in der Konsole eingegebene Code in einer Funktion
aufgerufen wird function execUserCode() { code }
Was Sie tun, ist Erstellen
function execUserCode() { }!{ }
Die Konsole gibt das letzte Ergebnis zurück, nämlich !{ }
= false
Bearbeiten:
Viele Kommentare darüber, wie das wahrscheinlich falsch ist. Ich stimme zu. Es ist nur eine Theorie.
Ich mag diese Art von Puzzles, also habe ich die Chromium-Quelle durchsucht, es ist ein bisschen viel für mich, aber ich werde einige Hinweise hinterlassen, falls jemand einen Stich hat.
Die JS-Konsole heißt "Inspektor" und kann hier gefunden werden:
chromium/src/third_party/WebKit/Source/WebCore/inspector/
Ich habe mir inspector/front-end/ConsoleView.js
angeschaut und ich glaube, ich habe ein wenig herausgefunden, wo der Benutzercode ausgeführt wird.
Kleine Gehirnwelle. Ich habe das in der Konsole gemacht
%Vor%Ergebnis:
%Vor%Ich war nah dran, aber jetzt haben wir die Antwort:)
Der Code wird derzeit in chromium/src/third_party/WebKit/Source/WebCore/inspector/InjectedScriptSource.js
in der Umgebung von Zeile 440 generiert.
Tags und Links javascript