Попытка добавить проверку XSRF в контактную форму


Я пытаюсь заблокировать недавний спамер формы "Свяжитесь с нами". Я решил, что лучший способ сделать это - добавить ключ формы и проверить его в контроллере.

Это работает, когда я изменяю основные файлы, что, очевидно, не является конечным решением,

Я прочитал несколько вопросов и учебных пособий по переопределению контроллера, и я попробовал их безрезультатно, основной контроллер всегда используется, и проверка никогда не происходит. Кто я такой поступаешь неправильно? (примечание: Я еще не создал модуль в Magento, это мой первый)

Вот что у меня есть:

Новый файл: app/code/local/ACS/Contacts/controllers/IndexController.php

Это копия основного файла app/code/core/Mage/Contacts/controllers/IndexController.php с добавлением

if (!$this->_validateFormKey()) {
    $error = true;
}

В блоке try функции postAction().

2-й Новый файл: app/code/local/ACS/Contacts/etc/config.xml

Который выглядит так:

<?xml version="1.0"?>
<config>
  <modules>
    <acs_contacts>
      <vesion>0.1.0</version>
    </acs_contacts>
  </modules>
  <frontend>
    <routers>
      <contacts>
        <args>
          <modules>
            <contacts before="Mage_Contacts">ACS_Contacts</contacts>
          </modules>
        </args>
      </contacts>
    </routers>
  </frontend>
</config>

И, наконец, последний новый файл app/etc/modules/ACS_Contacts.xml:

<?xml version="1.0"?>
<config>
  <modules>
    <ACS_Contacts>
      <active>true</active>
      <codePool>local</codePool>
   </ACS_Contacts>
 </modules>
</config>

И, конечно, я добавил ключ form_key в app/design/frontend/theme/template/contacts/form.phtml

Author: Raphael at Digital Pianism, 2016-04-21

2 answers

Сначала вам нужно исправить ваш файл app/code/local/ACS/Contacts/etc/config.xml:

<?xml version="1.0"?>
<config>
  <modules>
    <ACS_Contacts>
      <version>0.1.0</version>
    </ACS_Contacts>
  </modules>
  <frontend>
    <routers>
      <contacts>
        <args>
          <modules>
            <ACS_Contacts before="Mage_Contacts">ACS_Contacts</ACS_Contacts>
          </modules>
        </args>
      </contacts>
    </routers>
  </frontend>
</config>

Тогда ваш app/etc/modules/ACS_Contacts.xml нуждается в небольшом обновлении:

<?xml version="1.0"?>
<config>
  <modules>
    <ACS_Contacts>
      <active>true</active>
      <codePool>local</codePool>
      <depends>
          <Mage_Contacts/>
      </depends>
   </ACS_Contacts>
 </modules>
</config>

Наконец, не просто копируйте app/code/core/Mage/Contacts/controllers/IndexController.php в app/code/local/ACS/Contacts/controllers/IndexController.php, заставьте свой новый контроллер расширить исходный контроллер и просто создайте свой собственный postAction метод:

<?php
require_once 'Mage/Contacts/controllers/IndexController.php';

class ACS_Contacts_IndexController extends Mage_Contacts_IndexController
{
    public function postAction()
    {
         // Here you can copy the original method and modify it to fit your needs
    }
}
 2
Author: Raphael at Digital Pianism, 2016-04-25 13:49:59

В config.xml файл

<acs_contacts>
      <vesion>0.1.0</version>
</acs_contacts>

Изменено на:

<ACS_Contacts>
      <vesion>0.1.0</version>
</ACS_Contacts>
 2
Author: Prashant Valanda, 2016-04-25 13:49:26