Pickled objects over the network
Steve Holden
steve at holdenweb.com
Sun Jul 22 09:04:08 EDT 2007
Hendrik van Rooyen wrote:
> "Steve Holden" <steve at ho...eb.com> wrote:
>
>> I think someone has already pointed out netstrings, which will allow you
>> to send arbitrary strings over network connections deterministically.
>
> Yes I brought it up
>
>> I'm afraid for the rest it's just a matter of encoding your information
>> in a way that you can decode without allowing a malicious sender to
>> cause arbitrary code to be called.
>
> Yes - and in general you do this by having both the sender and the
> transmitter conform to some pre agreed format - a netstring is one
> of the simplest of such things - another way is to "frame" records
> between some kind of delimeter and to "escape" the occurences of the
> delimiter in the data. Another way is to use simple "self defining fields"
> that work by giving fields a "tag" number from a list of pre defined
> things, as well as a length, followed by the data - some financial
> protocols work as a variant of this concept, where the presence or
> absence of a bit signify the presence or absence of a field in the record.
>
> The problem with all of these schemes is that they are all a PITA to
> implement, compared to the ease with which you can pickle and
> unpickle something like a simple dict of parameters.
>
> And if that is all you want to pass over to some remote thing, then
> having to download and import Pyro is an equal PITA and overkill.
> - It adresses a far more sophisticated problem than just getting
> some small things across the network.
>
> Now if Pyro were to make it into the standard library, it would be
> my method of choice for even this silly level of functionality,
> because I happen to think it rocks.
>
>> The issue with pickle is that it's way too general a mechanism to be
>> secure in open network applications, so a suggestion to beef up its
>> security was misguided. Trying to "beef up pickle's security" is like
>> trying to make a shotgun that can't kill anything.
>>
>
> Is it really that impossible to add something like a "noeval" flag, or to
> force it to only give you a string or a dict if you ask for one or the other,
> given that someone has already mentioned that the built in types are
> decoded by separate routines?
>
> Or more generally - as it already has different protocols - to define a
> protocol that won't pass executable stuff over, or one that will only
> pass and accept the built in types?
>
Yes.
regards
Steve
--
Steve Holden +1 571 484 6266 +1 800 494 3119
Holden Web LLC/Ltd http://www.holdenweb.com
Skype: holdenweb http://del.icio.us/steve.holden
--------------- Asciimercial ------------------
Get on the web: Blog, lens and tag the Internet
Many services currently offer free registration
----------- Thank You for Reading -------------
More information about the Python-list
mailing list