In this email I sketch my personal view on the future of HTML, I do not<br>claim I have invented a solution to all security issues on the web; I merely <br>hope that this email will be the starting point of a real discussion on web-
<br>security instead of browser security. Since this is my first email to any of<br>these mailinglists, please correct me if I sent this to the wrong one.<br><br><br>The current design of the integration of JS and HTML is fundamentally flawed. 
<br>One of the major issues which should be learned from a long history of buffer <br>overflows etc is that one should never mix up data and code.<br>The consequences of this design flaw show itself by the XSS-exploits reported 
<br>on a daily basis. In my view the browser/standards developers can do 2 things:<br>&nbsp; - They can ignore it and state that it is a problem of the web-developers<br>&nbsp; - They can fix it in a similar manner the &quot;No Exec&quot; is implemented in current
<br>&nbsp;CPU architectures.<br><br>The first approach will never work: The average webdeveloper simply cannot <br>oversee possible XSS exploits, this method was attempted for numerous years <br>in the buffer overflow world... IMHOI the average webdeveloper is less 
<br>skilled then the average aplication developer.<br><br>The second solution might seem an utopia, but I think this is realizable. I <br>hope in 2/5 years browsers will have a special &quot;Secure Mode&quot; which ensures 
<br>webdesigners that their website is not vulnerable to XSS in these browsers.<br><br>The first step in implementing this &quot;No Exec&quot; strategie is that there needs <br>to be a clear distinction between JS and HTML. This can be achieved quite easily
<br>&nbsp;by preventing any JS operation inside a HTML/CSS file. All stuff related to <br>events and code executions should be in JS files.<br><br>Thus instead of creating<br><br>index.html<br>&nbsp;&lt;a href=# onclick=&quot;DoFunction()&quot; id=123 &gt;
<br><br>we write <br>index.html<br>&nbsp;&lt;a href=#&nbsp; id=123 &gt;<br><br>index.js<br>&nbsp; document.getElementById(&#39;123&#39;).onclick=&quot;DoFunction()&quot;<br><br>All JS functions in HTML files should not be executed, the JS-code should be rendered visually
<br><br><br>The next step is that we make a clear distinction in our DOM tree which code is
<br>&nbsp;executable and which is not. We might even consider creating 2 trees, one with<br>&nbsp;the executable code in it (retrieved from JS files), the other one with the <br>data (HTML, CSS files). None of the objects in the data tree should ever be executed.
<br><br>At this moment I cannot oversee the exact consequences 
<br>and limitations on the communications between these 2 trees.<br><br>Most XSS exploits might be prevented by this design, but there are still some <br>debatable issues:<br>&nbsp;&nbsp; - What if JS uses eval on a data block?<br>


&nbsp;&nbsp;&nbsp;&nbsp; * Prohibit the use of eval?<br>&nbsp;&nbsp; - What if the JS file contain some user generated content? <br>&nbsp;&nbsp;&nbsp;&nbsp; e.g. a PHP script will generate the JS code and write a line like <br>&nbsp;&nbsp;&nbsp;&nbsp; JSusername=$PHPusername;<br><br>&nbsp;&nbsp;&nbsp;&nbsp; If I select the username &lt;alert(hello)&gt; then this script is still 
<br>&nbsp;&nbsp;&nbsp;&nbsp; vulnerable to XSS<br><br>&nbsp;&nbsp;&nbsp;&nbsp; * A solution might be that only specially-signed scripts can be run in this<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;Secure mode&quot;; One can get this signature for free, but has to wait for 2<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; hours. In practice this will prevent people from doing these nasty
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; serverside things.<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp; The solution to this practical username example would be to include a <br>&nbsp;&nbsp;&nbsp;&nbsp; special div &lt;div id=username&gt;$PHPusername&lt;/div&gt; and then read the content <br>&nbsp;&nbsp;&nbsp;&nbsp; of the div in the JS file.
<br><br><br>One might wonder how to integrate this into the currently available websites. I<br>think a opt-in option would be sufficient; this might be taken into account into HTML5, <br>but we have to give the web-developer some candy for doing the effort of adjusting 
<br>his website. The new tool we will give him is the cross domain XmlHttpRequest.<br>Since we can exclude all XSS attacks most of the fundamental problems with <br>cross site XHR are automatically solved.<br><br>Separating code and data will simplify the parsers for both filetypes and thus 
<br>improve render performance and maybe even decrease render bugs...<br><br>Regards,<br>Pieter<br><br>