小编Ber*_*rdA的帖子

Symfony 3 - CSRF 令牌仅在使用 AJAX 提交时无效

环顾四周后我找不到解决方案。仅当通过 Ajax 提交时,我才会收到以下错误。这意味着我事先已经以常规 Symfony 方式提交了表单,没有出现任何问题。

\n\n
\n

CSRF 令牌无效。请尝试重新提交表格。

\n
\n\n

什么有效:

\n\n
    \n
  • 常规表单提交,即不使用 Ajax
  • \n
  • 使用 Ajax,我在控制器端提交之前检查了 $_POST 是否已正确填充,包括 CSFR 令牌,如下所示:
  • \n
\n\n
\n

$form->submit($request->request->get($form->getName(\'user\')));

\n
\n\n

根据要求,请参阅下面的输出

\n\n
\n

var_dump($request->request->get($form->getName(\'user\')));

\n
\n\n
array(8) { \n["name"]=> string(9) "fafdffafa" \n["avatar"]=> string(9) "dfafffafa" \n["cityId"]=> string(1) "6" \n["phone"]=> string(14) "33434343434344" \n["email"]=> array(2) { \n      ["first"]=> string(22) "myemail@gmail.com" \n      ["second"]=> string(22) "myemail@gmail.com" } \n["plainPassword"]=> array(2) { \n      ["first"]=> string(8) "senha444" \n      ["second"]=> string(8) "senha444" } \n["blogSubs"]=> string(1) "1" \n["_token"]=> string(43) "hLhyoRxVYmJ_FWK0FqXmiiEYZMZ77fDAWvxCZMXCtxw" }\n …
Run Code Online (Sandbox Code Playgroud)

javascript php ajax jquery symfony

5
推荐指数
1
解决办法
1946
查看次数

如何使用多个数据库设置 symfony 3 学说迁移?

我在验证和更新模式时努力让 symfony/doctrine 排除数据库视图。

我首先尝试不进行教条迁移(请参阅此问题),但这没有用。

我发现学说迁移会过滤掉验证/更新中的视图,而且确实如此,因此该步骤似乎适用于迁移。

因此,如果只有一个数据库原则,迁移会很好地工作,但至少可以说,使用多个数据库的设置并不是很干净。

这是一个已知问题,您可以在此链接中看到。不幸的是,当尝试遵循链接中描述的解决方案时,结果很混乱。

即使命令 migrations:update --em=default 将指示设置了正确的数据库,但在生成 migrations:diff --em=default 时,它将与其他数据库混合,同样与 migrates:migrate --em=default 混合,结束在另一个数据库上创建表。

更具体地说,错误是: - 它将按照配置文件中的指示为迁移文件创建单独的目录,但不会创建相应的 em - 它将生成混合两个 em 的 mysql 查询 - 因此它将更新 db

我的设置如下:

配置.yml

imports:
....
- { resource: doctrine_migrations_default.yml }
- { resource: doctrine_migrations_used.yml }

doctrine:
  dbal:
    default_connection: default
    connections:
        default:      
            .....
            #schema_filter: "~^(?!view).*$~"
            schema_filter: ~^(?!view_)~
        used:
             ......

orm:
    auto_generate_proxy_classes: '%kernel.debug%'
    default_entity_manager: default
    entity_managers:
        default:
            naming_strategy: doctrine.orm.naming_strategy.underscore
            connection: default
            auto_mapping: true
            mappings:
                AppBundle:  ~
        used:
            naming_strategy: doctrine.orm.naming_strategy.underscore …
Run Code Online (Sandbox Code Playgroud)

php symfony doctrine-orm doctrine-migrations

5
推荐指数
1
解决办法
4820
查看次数

PDO/准备语句/白名单/设置字符集,是否足够安全以防止注入?

我正在从扩展 mysql 转换为 PDO,在阅读了各位专家在 Stack\xc2\xa0Overflow 和其他地方的所有内容后,我还有一些剩余的问题。我想出了以下方法来解决典型查询的SQL 注入问题。我只是想知道这是否足够,或者在我将其复制到我的所有应用程序之前,我对白名单的处理可能有点过头了。

\n

我不清楚我是否正确地加入了白名单,即我是否也应该以某种方式逃脱。

\n

另外,我不确定是否应该为每个查询将 setAttribute 模拟为 false,或者只为脚本设置一次。

\n
$link = new PDO("mysql:host=$hostname;dbname=$database;charset=utf8", $username, $password);\n\n$link->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);\n\n$arr_i = $arr_k = \'\';\n$m_act = $v_act = \'Y\';\n$table = array(\'prices\', \'versions\', \'models\');\n$allowedTables = array(\'prices\', \'versions\', \'models\');\n$field = array(\'model_id\', \'version_id\', \'price\', \'models.active\', \'versions.active\');\n$allowedFields = array(\'model_id\', \'version_id\', \'price\', \'models.active\', \'versions.active\');\n\nif(count(array_diff($field, $allowedFields))==0 AND count(array_diff($table, $allowedTables))==0) {\n\n    $sql = "SELECT COUNT(DISTINCT `" . $field[0] . "`) as ctmod FROM `" . $table[0] . "`\n            INNER JOIN `" . $table[1] . …
Run Code Online (Sandbox Code Playgroud)

php mysql pdo sql-injection

4
推荐指数
1
解决办法
384
查看次数

mysql IN 子句不接受字符串变量

我的 IN 子句有一个奇怪的问题

变量 $fuel 来自对此 php 页面的 Ajax 调用。

$fuel = $_REQUEST['fuel'];

var_dump($fuel) = 'gas' ( for instance)
Run Code Online (Sandbox Code Playgroud)

现在,当在发起 Ajax 调用的 php 页面中未选择 $fuel 时,我需要使用以下代码插入 $fuel 的所有可能值:

 if($fuel=='none'){
    $fuel=array('gas','diesel','hybrid','electric');
    $fuel=implode(',',$fuel);
} 
Run Code Online (Sandbox Code Playgroud)

这是查询。当值直接来自 Ajax 调用时(例如,当 $fuel = 'gas' 时),它可以正常工作。

但是当我的 IF 子句生成 $fuel 并且 $fuel = 'gas,diesel,hybrid,electric' 时,它给了我一个空集。

SELECT * FROM vprice_range WHERE (power >= $power)
            AND (price BETWEEN $low AND $high)
            AND (fuel IN ('$fuel'))
            AND (mileagemix < $mileage)
            AND (emission_co2 < $co2)
            AND (trunk >= $trunk)
Run Code Online (Sandbox Code Playgroud)

这可能无关紧要,但请注意,“燃料”字段是一个 ENUM …

mysql

2
推荐指数
1
解决办法
1万
查看次数

Symfony 4 如何使用 React 设置 SPA(单页应用程序)?

我无法让 Symfony 4 在 SPA 设置中正常工作。

具体来说,当我使用 React-router 链接导航时,一切正常。

但是,如果我尝试直接访问任何路由(除了 home ),Symfony 会拦截它,当然,会为找不到路由引发错误。

将 Symfony 放在子域中并将其仅用作 API 的替代方案是不可行的,因为我需要框架提供的所有用户和会话管理工具。

当然,我将需要 Symfony 的所有 API 调用路由到后端。

我正在使用 Symfony 4 的默认目录结构,只在顶层为所有 react/redux 代码添加一个目录 /client。

构建代码放在 /public/build 下。

我还尝试使用以下代码在 /public 上放置一个 .htaccess 文件,但这没有帮助。

Options -MultiViews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [QSA,L]
Run Code Online (Sandbox Code Playgroud)

谢谢

php symfony reactjs react-router-dom

2
推荐指数
2
解决办法
4846
查看次数

将实体管理器注入事件侦听器时出现 Symfony 3 错误

我有一个事件侦听器,它设置一些会话变量,还检查访问者是否在上次访问时设置了某种类型的购物车,并在前端显示其详细信息。

该事件工作正常,直到尝试注入实体管理器,我需要在访问者实体上使用一些 setter/getter。

我也尝试过这个解决方案,但最终遇到了同样的问题,即“给出的字符串”而不是对象。

它产生的错误是:

类型错误:传递给 AppBundle\EventListener\InitializerListener::onKernelRequest() 的参数 2 必须是 Doctrine\ORM\EntityManager 的实例,给出的字符串

这是代码:]

服务.yml

  app.initializer_listener:
  class: AppBundle\EventListener\InitializerListener
  arguments: ["@doctrine.orm.entity_manager"]
  tags:
    - { name: kernel.event_listener, event: kernel.controller, method: onKernelRequest }
Run Code Online (Sandbox Code Playgroud)

AppBundle\EventListener\IniatilizerListener

namespace AppBundle\EventListener;

use Symfony\Component\HttpKernel\Event\FilterControllerEvent;
use Symfony\Component\HttpFoundation\Cookie;
use Symfony\Component\HttpFoundation\Response;
use UsedBundle\Entity\Visitor;
use Doctrine\Common\Persistence\ManagerRegistry;
use Doctrine\ORM\EntityManager;

class InitializerListener
{
private $event;
private $em;

public function onKernelRequest( FilterControllerEvent $event, EntityManager $em )
{   
    $visitor = new Visitor();

    $this->em = $em;

    $route = $event->getRequest()->get('_route');
    if ($event->isMasterRequest() && '_wdt' !== $route ) { …
Run Code Online (Sandbox Code Playgroud)

php events dependency-injection symfony doctrine-orm

1
推荐指数
1
解决办法
2242
查看次数