<html><head><meta http-equiv="Content-Type" content="text/html charset=windows-1252"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><br><div><div>On Oct 18, 2012, at 8:48 PM, John MacFarlane &lt;<a href="mailto:jgm@berkeley.edu">jgm@berkeley.edu</a>&gt; wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite"><span style="font-family: Helvetica; font-size: medium; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; display: inline !important; float: none; ">I could store a secret token along with the URL of each dingus server.</span><br style="font-family: Helvetica; font-size: medium; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; "><span style="font-family: Helvetica; font-size: medium; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; display: inline !important; float: none; ">(It would be best to use a different token for each server.) &nbsp;The</span><br style="font-family: Helvetica; font-size: medium; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; "><span style="font-family: Helvetica; font-size: medium; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; display: inline !important; float: none; ">multidingus would send this along with the request, and the servers</span><br style="font-family: Helvetica; font-size: medium; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; "><span style="font-family: Helvetica; font-size: medium; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; display: inline !important; float: none; ">could check for it.</span><br style="font-family: Helvetica; font-size: medium; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; "><br style="font-family: Helvetica; font-size: medium; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; "><span style="font-family: Helvetica; font-size: medium; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; display: inline !important; float: none; ">I'm not sure how much additional security that really gives you,</span><br style="font-family: Helvetica; font-size: medium; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; "><span style="font-family: Helvetica; font-size: medium; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; display: inline !important; float: none; ">though.</span></blockquote><br></div><div>Right. To be clear: No real additional *security* per se, but it does lighten the implementation burden for each individual dingus server: They donít half to worry about throttling requests, checking length, etc., if the master multi-dingus server assumes those responsibilities.</div><div><br></div><div>And I&nbsp;think we can all agree that making it as simple as possible for someone to add a dingus server for their own implementation is a Good Thing.</div><div><br></div><div><blockquote type="cite">Right now I just&nbsp;use the jquery text() function to insert it into the "pre"; this&nbsp;automatically escapes everything.&nbsp;</blockquote><br></div><div>100% sufficient and correct.</div><div><br></div><div><blockquote type="cite"></blockquote><blockquote type="cite"><blockquote type="cite">&nbsp; 3) If we show not just raw HTML but HTML previews as well, then yes, an<br>&nbsp;&nbsp;XSS scrubber should be used. However, it isnít probably huge deal<br>&nbsp;&nbsp;if the multi-dingus (a) only accepts POST, not GET, requests for<br>&nbsp;&nbsp;conversion, and (b) protects against CSRF attacks (many frameworks have<br>&nbsp;&nbsp;built-in CSRF protection). Given those assumptions, essentially the<br>&nbsp;&nbsp;only people who could suffer from bad output are the same people who<br>&nbsp;&nbsp;gave us bad input.<br></blockquote><br>I don't see any problems with using GET. &nbsp;And it's certainly useful to be<br>able to pass data to the script in the url; this way you can link to<br>results in discussions, etc.<br></blockquote><div><br></div><div>Absolutely, there are advantages to link-ability.</div><div><br></div><div>However, consider the case where all of these are true:</div><div><br></div><div>1) Itís possible, using merely GET, to control the input of the multi-dingus;</div><div>2) The multi-dingus displays an HTML preview, automatically or in a manner configurable via a GET param;</div><div>3) The HTML is _not_ sanitized or scrubbed</div><div><br></div><div>Then it is possible to send people a link that run arbitrary (attacker-controlled) javascript, on your server.</div><div><br></div><div>If there is no value to be gained by stealing a user session, and no way to automate the propagation of the link via JS on that page, then this still isnít a huge deal. I may be being paranoid here; I spent a lot of time thinking about this sort of thing while building Blogic &lt;<a href="http://themer.blogic.com/">http://themer.blogic.com/</a>&gt;.</div><div><br></div><div>Keep in mind that *not* scrubbing HTML makes for a slightly more complete service that can test more real-world edge cases. (Not everyone who uses Markdown accepts guest input or has a need or desire to run an XSS scrubber.)</div><div><br></div><div>I donít want to decide as to which trade-offs to make, but I do want to make sure they are understood.</div><div><br></div><blockquote type="cite">I don't plan to display formatted HTML at all, so that cuts down one<br>source of potential problems.<br></blockquote><div><br></div><div>This crosses off item 2 in my list. However, it is probably self-evident that being able to see formatted / rendered HTML is a faster way to notice most inconsistencies than reading raw HTML. Is it bold in one parser and not in another? I can see that in a glance, much faster than checking which tags open and close where, especially when whitespace around tags is inconsistent between implementations.</div><div><br></div><div>My *own* gut says to make rendered HTML available in the multi-dingus, but only as a user-controlled option (e.g., a button that runs a script like `$('div').html($('pre').text())`, in jQuery terms). This also crosses off item 2 in my list, without sacrificing scannability of output, if so desired.</div><br><blockquote type="cite"><br><blockquote type="cite">&nbsp;&nbsp;4) In general, shouldnít it be the multi-dingusí job to protect against<br>&nbsp;&nbsp;malicious code, instead of individual implementors? This would reduce<br>&nbsp;&nbsp;the "attack surface."<br></blockquote><br>I'm already doing everything I can think of in the multidingus.<br></blockquote><br></div><div>Fantastic to hear.</div><br><div>
<div style="color: rgb(0, 0, 0); font-family: Helvetica; font-size: medium; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><span class="Apple-style-span" style="border-collapse: separate; border-spacing: 0px; "><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><span class="Apple-style-span" style="border-collapse: separate; color: rgb(0, 0, 0); font-family: Helvetica; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; border-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; font-size: medium; "><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><span class="Apple-style-span" style="border-collapse: separate; font-family: Helvetica; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; border-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; font-size: medium; "><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><span class="Apple-style-span" style="border-collapse: separate; font-family: Helvetica; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; border-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; font-size: medium; "><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><div style="font-style: normal; color: rgb(0, 0, 0); ">Alan Hogan</div></div></span></div></span></div></span></div></span></div>
</div>
<br></body></html>