Archive for September, 2009
Ruby variables
Something that you might have to watch out for when working with Ruby is how it works with variables. Ruby variables are only references (pointers) to objects. Therefore, you might experience a subtle behavior that you probably don’t expect. Try this out in your irb:
irb(main):001:0> a = "some text" => "some text" irb(main):002:0> b = a => "some text" irb(main):003:0> a.object_id => 23109650 irb(main):004:0> b.object_id => 23109650 irb(main):005:0> a.gsub!(/ text/, "thing different") => "something different" irb(main):006:0> b => "something different" irb(main):007:0>
First, we assign a String object “some text”. We could have written it fully as a = String.new(“some text”).
Second, we say b = a, and for Ruby this means that b will now point to the same object as a, and you can verify it by running object_id on both variables. But now comes the catch – if you modify a, b will be automatically modified. So, by running gsub! on a, we also modify b.
However, if you assign a new value to one of those linked variables, the link breaks down, as now one of the variables points to another object. So, if you type a = “some new text”, b will not change, and actually a and b will now point to 2 different objects.
If you want to create a copy of an object and point a variable to it, instead of b = a, you could have cloned the object: b = a.clone.
Add comment September 24, 2009
Timing attack? What’s that about?
If you are wondering, like me, what was the “timing attack” fix update in the latest 2.3.4 for, you can read this post here. Basically, if a comparison is made between two strings, it’s done one character at a time, and it stops when the first differing character is encountered. Therefore a potential hacker could measure how much time it takes to check a cookie hash to see if it’s correct or not.
It all seems far fetched, given that surely there must be the overhead in terms of routing from attacker’s PC to your server and Internet Protocol actually works that way that the packets are sent using different nodes, but there are guys who think it’s practical. It’s claimed that most Java programs are exposed under this theoretical vulnerability, so it’s actually not a problem particular to Rails.
However, the bad news about this 2.3.4 patch is that it doesn’t work under Ruby 1.9.1.
Add comment September 8, 2009
Rails 2.3.4 is out, security vulnerabilities fixed
Rails 2.3.4 is out, just a few weeks after the 2.3.3. There are no new features, the reason for this quick release are the 2 vulnerabilities found in the Rails code (one is a possible XSS epxloit and the other is a cookie hack. The release notes state that over 100 small bugs were fixed as well.
However, given the amount of problems some users have (see some comments here) – mostly as it seems with Ruby 1.9, you might want to just patch the vulnerabilities for now, or at least test before you upgrade on production
.
Add comment September 5, 2009