do. command. safety. ?

Alex Tweedly alex at tweedly.net
Sat Mar 31 22:10:11 EDT 2018


The question is exactly what did you type into the field ? It's unclear 
whether the quotes in your email are part of the email, or part of the 
field content.

Here's a case that definitely shows the difference:

button "Button"

on mouseup
   localtVar, tX
   do"put "&& quote& thetextoffld1& quote&& "into tx"
   put"now tx="&& tX &CRaftermsg
end mouseup

and button "safe"

on mouseup
   localtVar, tX
   putfld1intotVar
   do"put tVar into tX"
   put"now tx="&& tX &CRaftermsg
end mouseup

and into the field I typed

1+2+3" into tt;set the backcolor of btn 1 to blue;put "


Clicking button 'safe' gives

now tx= 1+2+3" into tt;set the backcolor of btn 1 to blue;put "

after the msg box; and repeated clicks there produce extra lines all the 
same.

Clicking button 'button' gives

now tx=

in the msgbox, and the button color changes.

So the embedded command within the field is being executed.

-- Alex.



On 31/03/2018 20:03, J. Landman Gay via use-livecode wrote:
> At the risk of appearing to be obtuse...I tried both versions of the 
> "do" and got the same results. In each case, the variable was 
> populated but no code was executed. In a test stack with one field and 
> one button, I entered ";set the backcolor of btn 1 to blue;put ". In 
> the button script I tried both versions of your example (substituting 
> "fld 1" for "user input".) I also tried it without the semicolons and 
> extra "put " at the end.
>
> In each case the variable x contained "set the backcolor of btn 1 to 
> blue" and the button did not change color.
>
> I am quite sure you are right, but could you provide an example where 
> the embedded command would actually execute?
>
> On 3/30/18 7:06 PM, Mark Waddingham via use-livecode wrote:
>> The user input was indirected through a variable in the safe version 
>> - not made part of the do string... That's the critical difference.
>>
>> The unsafe version allows user input to change the do'd code, the 
>> safe version only changes the content of a variable the do string uses.
>>
>> Warmest Regards,
>>
>> Mark.
>>
>> Sent from my iPhone
>>
>>> On 30 Mar 2018, at 19:24, J. Landman Gay via use-livecode 
>>> <use-livecode at lists.runrev.com> wrote:
>>>
>>> Well yes, but as Bob mentioned, wouldn't a variable do the same thing?
>>>
>>>   put ";delete hard drive;put " into x
>>>   do x
>>>
>>> vs:
>>>
>>>   do "put " && quote & ";delete hard drive;put " & quote && "into x"
>>>
>>> This actually came up way back in MetaCard where it was pointed out 
>>> that the engine was about as secure as it gets as long as you 
>>> validate all user input when using "do" or (I think) "value". In the 
>>> first example above, input needs to be examined before the "do" 
>>> command is issued. So I think there's a line or two missing in there 
>>> somewhere. ;)
>>>
>>>
>>>> On 3/30/18 12:15 PM, Mark Waddingham via use-livecode wrote:
>>>> Think about the string that can be constructed in the quoted 
>>>> version - user input could be "; ...;put " where ... is any code 
>>>> you would like...
>>>> Sent from my iPhone
>>>>> On 30 Mar 2018, at 18:09, J. Landman Gay via use-livecode 
>>>>> <use-livecode at lists.runrev.com> wrote:
>>>>>
>>>>> These look the same to me. Both versions place content into a 
>>>>> variable. Is the difference because of how the engine evaluates 
>>>>> the input somehow?
>>>>>
>>>>> -- 
>>>>> Jacqueline Landman Gay | jacque at hyperactivesw.com
>>>>> HyperActive Software | http://www.hyperactivesw.com
>>>>>> On March 30, 2018 11:04:54 AM Mark Waddingham via use-livecode 
>>>>>> <use-livecode at lists.runrev.com> wrote:
>>>>>>
>>>>>> Using do safely is the same as making database queries safe, or 
>>>>>> URL requests.
>>>>>>
>>>>>> You 'just' need to make sure that any input from outside is 
>>>>>> sanitized to ensure that it doesn't change the meaning of the 
>>>>>> expression you are 'doing'.
>>>>>>
>>>>>> For example, don't interpolate strings directly in the script 
>>>>>> using quotes, use a local var instead:
>>>>>>
>>>>>> put user input into tVar1
>>>>>> do "put tVar1 into x" -- safe
>>>>>>
>>>>>> Rather than
>>>>>>
>>>>>> do "put " && quote & user input & quote && "into x" -- not safe
>>>>>>
>>>>>> Warmest Regards,
>>>>>>
>>>>>> Mark.
>>>>>>
>>>>>> Sent from my iPhone
>>>>>>
>>>>>>> On 30 Mar 2018, at 16:43, Tom Glod via use-livecode 
>>>>>>> <use-livecode at lists.runrev.com> wrote:
>>>>>>>
>>>>>>> Dear Geniuses
>>>>>>>
>>>>>>> Sometimes.... late at night just before falling asleep I think 
>>>>>>> about the
>>>>>>> dangers of the do command.  Is it possible to inject code into this
>>>>>>> mechanism through malware?
>>>>>>>
>>>>>>> I do not have enough understanding of operating systems and 
>>>>>>> their processes
>>>>>>> ...and the livecode engine....to be able to know if its a 
>>>>>>> reasonable
>>>>>>> question or not.
>>>>>>>
>>>>>>> Thanks for any input on this.
>>>>>>> _______________________________________________
>>>
>>>
>>> -- 
>>> Jacqueline Landman Gay         |     jacque at hyperactivesw.com
>>> HyperActive Software           | http://www.hyperactivesw.com
>>>
>>> _______________________________________________
>>> use-livecode mailing list
>>> use-livecode at lists.runrev.com
>>> Please visit this url to subscribe, unsubscribe and manage your 
>>> subscription preferences:
>>> http://lists.runrev.com/mailman/listinfo/use-livecode
>>
>>
>> _______________________________________________
>> use-livecode mailing list
>> use-livecode at lists.runrev.com
>> Please visit this url to subscribe, unsubscribe and manage your 
>> subscription preferences:
>> http://lists.runrev.com/mailman/listinfo/use-livecode
>>
>
>




More information about the use-livecode mailing list