In WebKit wird in meinem JavaScript der folgende Fehler angezeigt:
Weigerte sich, ein JavaScript-Skript auszuführen. Der Quellcode des Skripts, der in der Anfrage gefunden wurde.
Der Code ist für einen JavaScript-Spinner, siehe ASCII Art .
Der Code funktionierte einwandfrei und funktioniert in Camino und Firefox immer noch ordnungsgemäß. Der Fehler scheint nur ausgelöst zu werden, wenn die Seite über einen POST gespeichert und dann über einen GET abgerufen wird. Dies geschieht sowohl in Chrome / Mac als auch in Safari / Mac.
Weiß jemand, was dies bedeutet und wie man das behebt?
javascript
code-injection
Doekman
quelle
quelle
Antworten:
Dies ist eine Sicherheitsmaßnahme, um XSS- Angriffe (Cross-Site Scripting) zu verhindern .
Dies geschieht, wenn JavaScript-Code über eine HTTP-POST-Anforderung an den Server gesendet wird und derselbe Code über die HTTP-Antwort zurückgegeben wird. Wenn Chrome diese Situation erkennt, wird die Ausführung des Skripts verweigert und Sie erhalten die Fehlermeldung
Refused to execute a JavaScript script. Source code of script found within request
.Lesen Sie auch diesen Blogpost über Sicherheit im Detail: Neue Sicherheitsfunktionen .
quelle
Diese "Funktion" kann deaktiviert werden, indem der nicht standardmäßige HTTP-Header
X-XSS-Protection
auf der betroffenen Seite gesendet wird.quelle
Kurze Antwort : Aktualisieren Sie die Seite, nachdem Sie das Javascript zum ersten Mal eingereicht haben, oder klicken Sie auf die URL, die die Seite anzeigt, die Sie bearbeiten.
Lange Antwort : Da der Text, den Sie in das Formular ausgefüllt haben, Javascript enthält und der Browser nicht unbedingt weiß, dass Sie die Quelle des Javascript sind, ist es für den Browser sicherer anzunehmen, dass Sie nicht die Quelle dieses JS sind, und nicht ausführen.
Ein Beispiel : Angenommen, ich habe Ihnen einen Link zu Ihrer E-Mail oder Ihrem Facebook mit etwas Javascript gegeben. Und stell dir vor, das Javascript würde all deinen Freunden meinen coolen Link schicken. Das Spiel, bei dem dieser Link aufgerufen wird, wird einfach. Suchen Sie sich einen Ort, an dem Sie das Javascript so senden können, dass es auf der Seite enthalten ist.
Chrome und andere WebKit-Browser versuchen, dieses Risiko zu verringern, indem sie kein Javascript ausführen, das in der Antwort enthalten ist, wenn es in der Anforderung vorhanden war. Mein schändlicher Angriff würde vereitelt, weil Ihr Browser diesen JS niemals ausführen würde.
In Ihrem Fall senden Sie es in ein Formularfeld. Das Feld "Beitrag des Formulars" bewirkt ein Rendern der Seite, auf der Javascript angezeigt wird, was den Browser beunruhigt. Wenn Ihr Javascript jedoch wirklich gespeichert ist, kann es ausgeführt werden, wenn Sie dieselbe Seite ohne Senden des Formulars aufrufen.
quelle
Wie andere gesagt haben, geschieht dies, wenn eine HTTP-Antwort eine JavaScript- und / oder HTML-Zeichenfolge enthält, die ebenfalls in der Anforderung enthalten war. Dies wird normalerweise durch die Eingabe von JS oder HTML in ein Formularfeld verursacht, kann aber auch auf andere Weise ausgelöst werden, z. B. durch manuelles Anpassen der URL-Parameter.
Das Problem dabei ist, dass jemand mit schlechten Absichten das gewünschte JS als Wert festlegen, mit dem böswilligen JS-Wert auf diese URL verlinken und Ihren Benutzern Probleme bereiten kann.
In fast allen Fällen kann dies durch HTML-Codierung der Antwort behoben werden , obwohl es Ausnahmen gibt. Dies ist beispielsweise für Inhalte in einem
<script>
Tag nicht sicher . Andere spezielle Fälle können anders behandelt werden. Beispielsweise wird das Einfügen von Eingaben in eine URL besser durch die URL-Codierung unterstützt.Wie Kendall Hopkins erwähnt, kann es einige Fälle geben , wenn Sie tatsächlich wollen JavaScript von Formulareingaben ausgeführt werden, wie zum Beispiel eine Anwendung wie die Schaffung JSFiddle . In diesen Fällen würde ich empfehlen, dass Sie zumindest die Eingabe in Ihrem Backend-Code durchgehen, bevor Sie ihn blind zurückschreiben. Danach können Sie die von ihm erwähnte Methode verwenden, um die XSS-Blockierung zu verhindern (zumindest in Chrome). Beachten Sie jedoch, dass Sie dadurch für Angreifer geöffnet werden.
quelle
Ich habe diesen hackigen PHP-Trick verwendet, kurz nachdem ich mich für die Datenbank entschieden habe, aber bevor das Skript aus meiner
_GET
Anfrage gerendert wird :Dies war die billigste Lösung für mich.
quelle