In reading about how to avoid json hijacking I've come across various methods including POSTing everything or prepending responses so they are not valid JavaScript.
The most common way to prepend seems to be to add {} &&
in front of your object or array. Angular suggests prepending with )]}',\n
.
Why does angular not use the more standard {} &&
approach? Is one not totally secure? Is one more difficult to use in JavaScript? Angular aside, is there a good reason for taking the less popular approach?
\n is specifically used to move to a new line, while \r is used for a carriage return, which moves the cursor back to the beginning of the current line. In some cases it's standard to have \r\n such as in telnet applications, which often acts the same as \n.
\n means new line. It means that the cursor must go to the next line. \r means carriage return. It means that the cursor should go back to the beginning of the line.
\n is a line feed (LF) character, character code 10. \r is a carriage return (CR) character, character code 13. What they do differs from system to system. On Windows, for instance, lines in text files are terminated using CR followed immediately by LF (e.g., CRLF).
"\n" is the class Unix/linux style for new line. "\r\n" is the default Windows style for line separator. "\r" is classic Mac style for line separator.
Anything that stops the JSON response being parsed as a JavaScript object or array will prevent this method of JSON Hijacking.
See this post for some methods of making your JSON secure.
However, as this answer states, it is not really an issue since Firefox 3.
Google uses an "unparseable [cruft]" to defend its self against this type of attack. It should be noted that this vulnerability has been fixed in firefox 3, and this vulnerability arises from how browsers impalement the json specification.
At the time of writing Google appear to prepend )]}'
to their responses from Gmail.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With