Showing posts with label xslt. Show all posts
Showing posts with label xslt. Show all posts

20071001

Allowing Script and HTML Content from untrusted sources

Link

I think I've said a billion times that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 MySpace model of allowing HTML and/or script is an exception, not a rule. However, it seems cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 exceptions are getting more and more prominent as businesses are driven to allow dynamic content from cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ir customers in order to help cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 company's bottom line.

A colleague today asked me (without reading here first - shame, shame) how a company he is helping could allow markup and script, but not allow just any old markup or script. Of course, my first response is "why?", but I keep that to myself. My second response is always very aggressive white-listing of what you believe is acceptable.

I think cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 colleague has pretty well told cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ir customer that starting with XHTML and a restrictive DTD (or even better, XML-Schema or RelaxNG) will be cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 most beneficial starting place. This way, you can rely on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 schema and your really excellent processor to define what is and isn't allowed. Granted, you'll have to not allow entity definition and ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r things that could potentially cause XML processing DoS's. But cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n you're left with a whitelist of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 types of tags available.

Once you have a really scaled-down, well-defined list of what is allowed, you can cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n go through attributes and perform additional whitelisting. Suppose we don't allow javascript in href's on attributes - we can just check cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 href attributes in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 DOM (we know we have a valid DOM and a finite set of attributes to test since it passed cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 schema), and verify that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y all begin with http:// or https:// . Img tags would work similarly.

For those things that do need scripting, you define new sets of tags. This is not dis-similar to Blogger's plugin model. They allow scripting, but cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y control cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 script - you have to put script in by using cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ir pre-defined plugin tags, which use (probably) an XSLT to translate that to script cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y can deal with.

It's not going to be without work, but I think my colleague is going to be able to propose a solution to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ir customer that will be quite secure, and still give cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 clients cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 control over cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ir content cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y crave. Thanks be to Blogger for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 model. Blogger is certainly not cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 only site that operates this way, but it beats cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 myspace model - allow anything until a worm starts, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n disallow cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 exact vector that created cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 worm.

Seems this is precisely what XML and XSLT were invented for...