+ + Library plugins, such as those for the jQuery library, are often + configurable through options provided by the clients of the + plugin. + + + Clients, however, do not know the implementation details + of the plugin, so it is important to document the capabilities of each + option. The documentation for the plugin options that the client is + responsible for sanitizing is of particular importance. + + Otherwise, the plugin may write user input (for example, a URL query + parameter) to a web page without properly sanitizing it first, + which allows for a cross-site scripting vulnerability in the client + application through dynamic HTML construction. + +
++ + Document all options that can lead to cross-site scripting + attacks, and guard against unsafe inputs where dynamic HTML + construction is not intended. + +
+
+
+ The following example shows a jQuery plugin that selects a
+ DOM element, and copies its text content to another DOM element. The
+ selection is performed by using the plugin option
+ sourceSelector as a CSS selector.
+
+
+
+ This is, however, not a safe plugin, since the call to
+ jQuery interprets sourceSelector as HTML if
+ it is a string that starts with <.
+
+
+
+ Instead of documenting that the client is responsible for
+ sanitizing sourceSelector, the plugin can use
+ jQuery.find to always interpret
+ sourceSelector as a CSS selector:
+
+