Mercurial > prosody-hg
comparison core/xmlhandlers.lua @ 4276:a37522bf6b1b
xmlhandlers: Reject XML comments, processing instructions and (if supported by LuaExpat) DTDs. If not supported, log a warning. [Backport of 7cc426988bcc in trunk]
| author | Matthew Wild <mwild1@gmail.com> |
|---|---|
| date | Wed, 01 Jun 2011 23:20:54 +0100 |
| parents | b7049746bd29 |
| children | 683523db4fe8 65e2c089d138 |
comparison
equal
deleted
inserted
replaced
| 3050:76f0d653b347 | 4276:a37522bf6b1b |
|---|---|
| 16 local ipairs = ipairs; | 16 local ipairs = ipairs; |
| 17 local t_insert = table.insert; | 17 local t_insert = table.insert; |
| 18 local t_concat = table.concat; | 18 local t_concat = table.concat; |
| 19 | 19 |
| 20 local default_log = require "util.logger".init("xmlhandlers"); | 20 local default_log = require "util.logger".init("xmlhandlers"); |
| 21 | |
| 22 -- COMPAT: w/LuaExpat 1.1.0 | |
| 23 local lxp_supports_doctype = pcall(lxp.new, { StartDoctypeDecl = false }); | |
| 24 | |
| 25 if not lxp_supports_doctype then | |
| 26 default_log("warn", "The version of LuaExpat on your system leaves Prosody " | |
| 27 .."vulnerable to denial-of-service attacks. You should upgrade to " | |
| 28 .."LuaExpat 1.1.1 or higher as soon as possible. See " | |
| 29 .."http://prosody.im/doc/depends#luaexpat for more information."); | |
| 30 end | |
| 21 | 31 |
| 22 local error = error; | 32 local error = error; |
| 23 | 33 |
| 24 module "xmlhandlers" | 34 module "xmlhandlers" |
| 25 | 35 |
| 132 stanza = nil; | 142 stanza = nil; |
| 133 else | 143 else |
| 134 stanza:up(); | 144 stanza:up(); |
| 135 end | 145 end |
| 136 end | 146 end |
| 147 | |
| 148 local function restricted_handler() | |
| 149 cb_error(session, "parse-error", "restricted-xml", "Restricted XML, see RFC 6120 section 11.1."); | |
| 150 end | |
| 151 | |
| 152 if lxp_supports_doctype then | |
| 153 xml_handlers.StartDoctypeDecl = restricted_handler; | |
| 154 end | |
| 155 xml_handlers.Comment = restricted_handler; | |
| 156 xml_handlers.StartCdataSection = restricted_handler; | |
| 157 xml_handlers.ProcessingInstruction = restricted_handler; | |
| 158 | |
| 137 return xml_handlers; | 159 return xml_handlers; |
| 138 end | 160 end |
| 139 | 161 |
| 140 return init_xmlhandlers; | 162 return init_xmlhandlers; |
