Как делают Вас Модульный тест Zend_Form, который включает элемент формы CSRF?

Linq к объектам, в 580 символах (без пробела)

Console.WriteLine(Enumerable.Range(1, 13).SelectMany(day =>
    Enumerable.Repeat("\nOn the " + day + 
                      (day == 1 ? "st" : 
                      (day == 2 ? "nd" : 
                      (day == 3 ? "rd" : 
                      "th"))) + " day of Christmas my true love gave to me ", 1)
              .Concat((new []
                {
                    "twelve drummers drumming,",
                    "eleven pipers piping,",
                    "ten lords a-leaping,",
                    "nine ladies dancing,",
                    "eight maids a-milking,",
                    "seven swans a-swimming,",
                    "six geese a-laying,",
                    "five gold rings,",
                    "four calling birds,",
                    "three french hens,",
                    "two turtle doves, and",
                    "a partridge in a pear tree."
                }).Reverse().Take(day).Reverse()))
              .Aggregate((a, b) => a + "\n" + b));
6
задан joedevon 10 July 2009 в 18:26
поделиться

3 ответа

Правильный хеш хранится в сеансе, а элемент формы Hash имеет экземпляр Zend_Session_Namespace, который содержит пространство имен для хэша.

Для модульного тестирования элемента вы должны заменить экземпляр Zend_Session_Namespace в элементе (с setSession) на тот, который вы создали сами, который содержит правильный хэш ( хэш хранится в ключе "hash")

Для дальнейших примеров вы, вероятно, могли бы взглянуть на модульные тесты Zend Framework для класса Zend_Form_Element_Hash. Я предполагаю, что им тоже приходилось иметь дело с этим.

)

В качестве дополнительных примеров вы, вероятно, можете посмотреть модульные тесты Zend Framework для класса Zend_Form_Element_Hash. Я предполагаю, что им тоже приходилось иметь дело с этим.

)

В качестве дополнительных примеров вы, вероятно, можете посмотреть модульные тесты Zend Framework для класса Zend_Form_Element_Hash. Я предполагаю, что им тоже приходилось иметь дело с этим.

3
ответ дан 8 December 2019 в 16:08
поделиться

Порядок свойств объекта не гарантированно будет таким же, как вы их вставляете. Однако на практике все основные браузеры возвращают их с целью. Так что, если вы не против полагаться на это ...

var firstProp;
for(var key in jsonObj) {
    if(jsonObj.hasOwnProperty(key)) {
        firstProp = jsonObj[key];
        break;
    }
}

Также обратите внимание, что в Chrome есть ошибка , касающаяся порядка, в некоторых крайних случаях он не упорядочивает его так, как они были предоставлены . Что касается того, что он изменится в будущем, шансы на самом деле довольно малы, поскольку я считаю, что это становится частью стандарта, поэтому, если что-либо, поддержка этого станет только официальной.

Однако, если вы действительно, действительно , безусловно, положительно, хочу быть уверенным, что он будет в правильном порядке, в котором вам нужно использовать массив. В противном случае все в порядке.

Связанный вопрос: разработка, постановка или производство

Строка для файла vhost:

SetEnv SITE_ENV "dev" 

Затем я просто заставляю свои формы реагировать на соответствующую среду:

if($_SERVER['SITE_ENV']!='dev')
{
   $form_element->addValidator($csrf_validator);
}

Я использую ту же технику для многих вещей. Например, если это разработчик, я перенаправляю всю исходящую почту мне и т. Д.

1
ответ дан 8 December 2019 в 16:08
поделиться

Значение CSRF генерируется каждый раз при рендеринге формы. Скрытый элемент формы предварительно заполняется этим значением. Это значение также сохраняется в сеансе. После отправки формы проверка проверяет, сохраняется ли значение, отправленное из формы, в сеансе, в противном случае проверка не выполняется. Важно, что эта форма должна быть визуализирована во время теста (чтобы она могла генерировать скрытое значение и сохранять его в сеансе), тогда мы можем извлечь скрытое значение из визуализированного html, а позже мы можем добавить скрытое хеш-значение в наш запрос. Рассмотрим этот пример:

function testAddPageStoreValidData()
{
    // render the page with form 
    $this->dispatch('/form-page');

    // fetch content of the page 
    $html = $this->getResponse()->getBody();

    // parse page content, find the hash value prefilled to the hidden element
    $dom = new Zend_Dom_Query($html);
    $csrf = $dom->query('#csrf')->current()->getAttribute('value');

    // reset tester for one more request
    $this->resetRequest()
         ->resetResponse();

    // now include $csrf value parsed from form, to the next request
    $this->request->setMethod('POST')
                  ->setPost(array('title'=>'MyNewTitle',
                                  'body'=>'Body',
                                  'csrf'=>$csrf));
    $this->dispatch('/form-page');

    // ...
}
9
ответ дан 8 December 2019 в 16:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: