Mike,

Offhand, telling anyone they are "absolutely wrong" and speaking to them by saying "that does not mean that I think you're a bad person" and that person "seem[s] like a wonderful man" comes off as being quite arrogant. I'm not sure what compels you to make such statements no matter how badly you disagree with what anyone is saying... .

You make some very interesting arguments...

However, "sanitizing" via "deletion" or "dis-allowing" certain characters is just plain "silly" IMHO and if you carefully read my initial post you will see that is not what I suggested NOR what is commonly suggested for preventing XSS attacks. If people like those that develop banking web sites decide to take a draconian view then that is unfortunate but that is not what we are talking about here within the context of "sensible" development. In other words taking characters like ', <, >, etc... and "escaping" them to \', &lt;, &gt;, etc... to be presented on a "web page" is something that has ZERO negative effect on the user's input and does has not prevented the user from expressing themselves in any way, shape or form. The comment about "O'Hara" is equally dismissed as it can be encoded as "O&#x27;Hara" which when presented in a web page looks exactly like "O'Hara" to the user; so there is once again no need to disallow ' characters as you argue.

The point that you raise that is most interesting is that "Data sanitization is a *presentation* problem, not an input problem".

While this is debatable and not by any means black & white IMHO... I will agree because although 99% of the time our data will be presented in HTML there is the time when we send HTML E-mails that we will also send a Plain Text version along with it in case the users e-mail client does not display HTML... in such a case "O&#x27;Hara" won't cut it.

So delaying to "sanitize" at presentation time is beneficial if you are dealing with multiple output formats or want to maintain that flexibility BUT there is no free lunch as delayed "sanitization" is less performant on a high read - low write - web app (such as ours).

--Nikolaos



Mike McNally wrote:
For what it's worth, I entirely disagree with the idea that all input must be sanitized on the way in. That reflects a fundamental misunderstanding of the generalized problem of which XSS is just one manifestation.

User input is user input. What's important (vital, I'd say) is for the software to be sensitive to the fact that user input may end up being presented to "ignorant" parsers for interpretation. A good example is SQL. There's nothing wrong with the name "O'Hara". It's somebody's name, and we cannot and should not disallow somebody from using that string as their name. But because that name contains the single-quote character, it's important that the server software takes care with it whenever it's being used in a SQL query. Similarly, the presentation layer might need to be careful should that name need to be used in a Javascript string, or in an HTML attribute value. Quoting of user-supplied data needs to be done at the point that the values are being handed over to another (ignorant) agent for re-interpretation. HTML is just one of many such cases. It makes absolutely no sense to pick one potential destination environment as the critical target for data "sanitization". This point is made clearly evident by considering the fact that the requirements for protecting user-supplied strings from misinterpretation by an HTML/XML parser are completely different from those necessary to protect against Javascript misinterpretation.

Data sanitization is a *presentation* problem, not an input problem. There may of course be guidelines about what certain particular input fields look like; obviously an ampersand is inappropriate in a phone number. But whenever I use a bank website written by clearly incompetent contractors that disallows my use of ampersands in "secure messages" to customer support, I'm reminded of how rare it is that this truism is misunderstood (or not understood at all) in the web application development community.

Thus, Niklolaos, I think you're absolutely wrong. That does not mean that I think you're a bad person. Indeed, from your many posts on this mailing list, you seem like a wonderful man. I ask simply that you consider the fundamental nature of the problem. If I want to submit a "description" for some data entry, and my description includes angle brackets and ampersands, why would you disallow that? It's my comment or description, after all. I may have a very good reason to use those characters. The fact that they're HTML metacharacters is probably completely unknown to your typical user. They see the characters on the keyboard, and they feel entitled to use them. That's perfectly reasonable.


On Wed, Oct 27, 2010 at 8:13 PM, Rick Grashel <rgras...@gmail.com <mailto:rgras...@gmail.com>> wrote:

    I would recommend reading OWASP.org regarding this stuff.  Their
best practices on XSS as well as SQL injection are very good.
    
http://www.owasp.org/index.php/XSS_%28Cross_Site_Scripting%29_Prevention_Cheat_Sheet

    -- Rick


    On Wed, Oct 27, 2010 at 3:43 PM, Nikolaos Giannopoulos
    <nikol...@brightminds.org <mailto:nikol...@brightminds.org>> wrote:

        Hi,

        Freddy's book is awesome and has a Security chapter that
        covers XSS
        though it appears to me to take an inverted view on XSS attacks.

        Here is what I think:

        1) All user data should be considered unsafe and "sanitized"
        before
        being processed i.e. I don't want say <script> to be stored
        as-is in any
        field in the DB vs. when displaying the data make sure to
        filter the <
        and > for &lt; and &gt;

        2) There needs to be an attempt to handle other things like
        converting '
        to \' and \ to \\ and some SQL things like DELETE FROM and on
        and on...

        3) Also content is typically (at least in our case) viewed far
        more
        often than it is stored... so it would be more efficient to do
        processing on the front-end vs. the back-end

        With all that said, I wonder if an appropriate solution would
        be to
        build a XssStringTypeConverter that encapsulates this
        filtering... and
        then through the @Validate do something like:

        @Validate(field = "someField",
        converter=XssStringTypeConverter.class)

        Of course this can get tedious but as we are using
        @StrictBinding to
        force only fields in @Validate to be injected this doesn't
        seem that bad.

        What do others think of this solution?  What other solutions
        are being
        used?  Perhaps this should be built-in to Stripes.

        Thought???  Comments???  All welcome and appreciated.

        --Nikolaos

        
------------------------------------------------------------------------------
        Nokia and AT&T present the 2010 Calling All Innovators-North
        America contest
        Create new apps & games for the Nokia N8 for consumers in
         U.S. and Canada
        $10 million total in prizes - $4M cash, 500 devices, nearly
        $6M in marketing
        Develop with Nokia Qt SDK, Web Runtime, or Java and Publish to
        Ovi Store
        http://p.sf.net/sfu/nokia-dev2dev
        _______________________________________________
        Stripes-users mailing list
        Stripes-users@lists.sourceforge.net
        <mailto:Stripes-users@lists.sourceforge.net>
        https://lists.sourceforge.net/lists/listinfo/stripes-users



    
------------------------------------------------------------------------------
    Nokia and AT&T present the 2010 Calling All Innovators-North
    America contest
    Create new apps & games for the Nokia N8 for consumers in  U.S.
    and Canada
    $10 million total in prizes - $4M cash, 500 devices, nearly $6M in
    marketing
    Develop with Nokia Qt SDK, Web Runtime, or Java and Publish to Ovi
    Store
    http://p.sf.net/sfu/nokia-dev2dev
    _______________________________________________
    Stripes-users mailing list
    Stripes-users@lists.sourceforge.net
    <mailto:Stripes-users@lists.sourceforge.net>
    https://lists.sourceforge.net/lists/listinfo/stripes-users



------------------------------------------------------------------------------
Nokia and AT&T present the 2010 Calling All Innovators-North America contest
Create new apps & games for the Nokia N8 for consumers in  U.S. and Canada
$10 million total in prizes - $4M cash, 500 devices, nearly $6M in marketing
Develop with Nokia Qt SDK, Web Runtime, or Java and Publish to Ovi Store 
http://p.sf.net/sfu/nokia-dev2dev
_______________________________________________
Stripes-users mailing list
Stripes-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/stripes-users

Reply via email to