Symfony学说有sql注入失败?

Symfony doctrine had an sql injection failure?

提问人:Mikopet 提问时间:10/27/2015 最后编辑:Mikopet 更新时间:11/1/2015 访问量:401

问:

我在symfony 3中做了一个小项目,并运行了 detectify.com。 正如detectify所说,我有“MySQL中的盲目SQL注入”风险

我有Postgres,但没关系。扫描后,我在表中的键升级到 700。但这里没有数据。 所以,我有安全风险。

控制器:

public function bidAction($category = null, Request $request)
{

    $bid = new Bids();
    $bid->setCategory($category);
    $bid->setDate(new \DateTime('now'));

    $form = $this->createFormBuilder($bid)
        ->add('notes', 'textarea', array('label' => 'Message'))
        ->add('email', 'email')
        ->add('save', 'submit', array('label' => 'Write your bid'))
        ->getForm();

    $form->handleRequest($request);

    if ($form->isValid() && $form->isSubmitted()) {
        $em = $this->getDoctrine()->getManager();
        $em->persist($bid);
        $em->flush();

        return $this->redirectToRoute('mikola_studio_main_bid_category', array('category'=>'success'));
    }

    return $this->render('MikolaStudioMainBundle:Default:bid.html.twig',
        array(
            'category' => $category,
            'form' => $form->createView(),
            'unique'=>false, // for template
            'sidebar'=>true  // for template
        ));
}

我有信心,坚持教义免受SQL注入的保护 我现在很失望

实体:

/**
 * @var string
 *
 * @ORM\Column(name="notes", type="text")
 */
private $notes;

/**
 * @var string
 *
 * @Assert\Email(
 *     message = "The ({{ value }}) is not valid!",
 *     checkMX = true
 * )
 * @ORM\Column(name="email", type="string", length=255)
 */
private $email;

树枝:

                    {{ form_start(form) }}
                    {{ form_errors(form) }}

                    {{ form_row(form.notes) }}
                    {{ form_row(form.email) }}

                    <footer>{{ form_row(form.save, {'attr': {'class': 'button icon fa-shopping-cart'}}) }}</footer>
                    {{ form_end(form) }}

detectify 请求正文:

form%5Bnotes%5D=&form%5Bemail%5D=If(%40x%2c0%2c(SeleCT(%40x%3a%3dSleeP(0.1)--1))‌​)%2f*%27Or(If(%40x%2c0%2c(SeleCT(%40x%3a%3dSleeP(0.1)--1))))Or%27%22or(If(%40x%2c‌​0%2c(SeleCT(%40x%3a%3dSleeP(0.1)--1))))Or%22*%2f&form%5Bsave%5D= 

读:

form[notes]=&form[email]=If(@x,0,(SeleCT(@x:=SleeP(0.1)--1))‌​)/*'Or(If(@x,0,(SeleCT(@x:=SleeP(0.1)--1))))Or'"or(If(@x,‌​0,(SeleCT(@x:=SleeP(0.1)--1))))Or"*/&form[save]= 

enter image description here

symfony 学说-orm SQL注入

评论

1赞 lxg 10/27/2015
SQL注入是一个严肃的问题,但我认为你在这里有一个误报。如果你没有在应用程序代码中搞砸(例如,发布带有未转义有效负载的原始 SQL 查询),那么默认情况下 Doctrine 是相当安全的。我不知道这项服务,但有很多这样的服务,其中大多数都用“恐吓软件”一词进行了很好的描述。无论如何,警告是否表明 Doctrine/Symfony 的哪些特定部分处于危险之中?该工具是否揭示了确切的攻击媒介?detectify.com
0赞 Mikopet 10/27/2015
不,没说。但是在我的数据库表中,我看到,新记录不是从正常 ID(自动递增)开始的,而是从 +700 开始的!O.0 所以我认为 detectify 可以写入 700 条记录(不是什么大问题),并且可以删除它们!(这是一件大事)
0赞 Mikopet 10/28/2015
请求正文:form%5Bnotes%5D=&form%5Bemail%5D=If(%40x%2c0%2c(SeleCT(%40x%3a%3dSleeP(0.1)--1)))%2f*%27Or(If(%40x%2c0%2c(SeleCT(%40x%3a%3dSleeP(0.1)--1))))Or%27%22or(If(%40x%2c0%2c(SeleCT(%40x%3a%3dSleeP(0.1)--1))))Or%22*%2f&form%5Bsave%5D=
1赞 Cerad 10/28/2015
detectify 网站说您会收到一份易于理解的报告。请用实际报告更新您的问题。并将请求正文内容也移动到您的问题中,使其具有可读性。
0赞 lxg 10/28/2015
@Mikopet:你能试着“重播”攻击吗?这给你带来了什么结果?任何错误或成功消息?

答: 暂无答案