Development

Changeset 33598

You must first sign up to be able to contribute.

Changeset 33598

Show
Ignore:
Timestamp:
11/25/12 10:57:29 (1 year ago)
Author:
fabien
Message:

[1.4] fixed the possibility to fake a file upload

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • branches/1.4/lib/form/sfForm.class.php

    r29678 r33598  
    223223    } 
    224224 
     225    $this->checkTaintedValues($this->taintedValues); 
     226 
    225227    try 
    226228    { 
     
    13371339    return $array1; 
    13381340  } 
     1341 
     1342  /** 
     1343   * Checks that the $_POST values do not contain something that 
     1344   * looks like a file upload (coming from $_FILE). 
     1345   */ 
     1346  protected function checkTaintedValues($values) 
     1347  { 
     1348    foreach ($values as $name => $value) 
     1349    { 
     1350      if (!is_array($value)) { 
     1351        continue; 
     1352      } 
     1353 
     1354      if (isset($value['tmp_name'])) { 
     1355        throw new InvalidArgumentException('Do not try to fake a file upload.'); 
     1356      } 
     1357 
     1358      $this->checkTaintedValues($value); 
     1359    } 
     1360  } 
    13391361} 
  • branches/1.4/test/unit/form/sfFormTest.php

    r29678 r33598  
    1111require_once(dirname(__FILE__).'/../../bootstrap/unit.php'); 
    1212 
    13 $t = new lime_test(163); 
     13$t = new lime_test(165); 
    1414 
    1515class FormTest extends sfForm 
     
    980980$f->bind(array('5' => 'bound')); 
    981981$t->is_deeply($f->getFormFieldSchema()->getValue(), array('5' => 'bound'), '->getFormFieldSchema() includes bound numeric fields'); 
     982 
     983// bind with a simulated file upload in the POST array 
     984$f = new FormTest(); 
     985try 
     986{ 
     987  $f->bind(array( 
     988    'file' => array( 
     989      'name' => 'foo.txt', 
     990      'type' => 'text/plain', 
     991      'tmp_name' => 'somefile', 
     992      'error' => 0, 
     993      'size' => 10, 
     994     ), 
     995  )); 
     996  $t->fail('Cannot fake a file upload with a POST'); 
     997} 
     998catch (InvalidArgumentException $e) 
     999{ 
     1000  $t->pass('Cannot fake a file upload with a POST'); 
     1001} 
     1002 
     1003$f = new FormTest(); 
     1004try 
     1005{ 
     1006  $f->bind(array( 
     1007      'foo' => array( 
     1008        'bar' => array( 
     1009          'file' => array( 
     1010            'name' => 'foo.txt', 
     1011            'type' => 'text/plain', 
     1012            'tmp_name' => 'somefile', 
     1013            'error' => 0, 
     1014            'size' => 10, 
     1015          ), 
     1016        ), 
     1017      ), 
     1018  )); 
     1019  $t->fail('Cannot fake a file upload with a POST'); 
     1020} 
     1021catch (InvalidArgumentException $e) 
     1022{ 
     1023  $t->pass('Cannot fake a file upload with a POST'); 
     1024}