Aranetix扫描Laravel登录页面

时间:2016-05-06 22:41:54

标签: php security laravel-5.1 csrf-protection

我有一个使用Laravel 5.1框架编写的应用程序。最近,我的一个客户在应用程序上运行了Acunetix安全扫描,并在我的登录页面上找到了HTML form with no apparent CSRF protection

但是,登录表单具有CSRF保护。具有CSRF令牌的元素的名称是“_token”。扫描结果显示“发现者:抓取者”。

所以我的问题是:

  • 为什么acunetix会显示这个结果?
  • “_token”不是CSRF令牌元素的可识别名称吗?我应该使用更易识别的名称在表单中添加另一个隐藏元素吗?
  • 这是什么意思“发现者:Crawler”?这是否意味着扫描只检查表单HTML而不是其他内容?

以下是HTML表单刀片模板的片段:

@section('content')
        <form id="loginForm" class="form-signin" role="form" method="POST" action="{{ url('/auth/login') }}">
            <h2 class="form-signin-heading"><img src="/images/J10_Logo_330x194.jpg" alt="{{ trans('content.image_alt.j10_logo') }}"></h2>
            <input type="hidden" name="_token" value="">
            <label for="username" class="">{{ trans('auth.login.username') }}</label>
            <input type="username" class="form-control" name="username" value="{{ old('username') }}">
            <label for="inputPassword" class="">{{ trans('auth.login.password') }}</label>
            <input type="password" class="form-control" name="password" autocomplete="off">
            <div class="forgot-password"><input type="checkbox" name="remember"> {{ trans('auth.login.remember_me') }}</div>
            <div class="forgot-password"><a href="#">{{ trans('auth.login.forgot_password') }}</a></div>
            <button type="submit" class="btn btn-lg btn-primary btn-block">{{ trans('auth.login.login') }}</button>
@if (count($errors) > 0)
            <p class="text-danger">
@foreach($errors->all() as $error)
                {{ $error }}<br />
@endforeach
            </p>
@endif
        </form>
@endsection

您可能会注意到在上面的代码段中,“_ token”元素值为空。这是故意的,因为我基本上试图通过仅使用javascript设置其值来“绕过”acunetix的检测,因为到目前为止我尝试的所有内容似乎都不起作用。

1 个答案:

答案 0 :(得分:1)

提供的警报最有可能表明这可能是误报。 CSRF警告通常需要人工干预来验证是否:

  1. 实际上有一个反CSRF令牌
  2. 如果表单(或更确切地说,输入)需要任何反CSRF
  3. 如果您已经使用了反CSRF令牌,那么您可以继续将该警报标记为误报。这将从受影响项目的任何未来扫描中省略它(例如userinfo.php,被视为项目)

    爬网程序模块会发现某些警报,例如您指定的警报。由于Acunetix漏洞扫描程序采用黑盒方法,因此它不具备扫描的应用程序的先验知识。

    因此,它首先通过使用爬虫模块动态地映射应用程序的站点结构并同时发现特定警报(通常是中等或低警报)来开始。爬网完成后,实际的扫描仪模块将启动,以继续对爬网程序发现的所有项目运行每个安全测试(脚本)。

    关于你的一条评论 - &#34;我假设acunetix抓取工具没有运行javascript而且不会填充_token元素。&#34;

    抓取工具 perse 不会执行和分析Javascript,但DeepScan(阅读更多here)技术会执行,这会在抓取阶段发生。因此,扫描程序仍然能够理解客户端繁重的应用程序,例如SPAs利用AngularJS,ReactJS等框架。