首页 > 解决方案 > PHP - Laravel:尝试将 javascript 代码保存到 mysql 数据库时出现 403 禁止错误

问题描述

我知道这通常是不受欢迎的,但由于我将在下面说明的具体原因,我需要这个功能:

所以我们在这个网站上所做的是我们允许用户购买他们可以销售产品的“商店”,现在这些用户想要在他们的商店中添加“Facebook Pixel”之类的东西,以便他们跟踪不同的活动.

这是我负责代码的表格

    <form action="{{ url('vendor/store/settings/analytics/update') }}" method="POST" style="margin-top: 30px;">
        {{ csrf_field() }}
        <div class="analytics-form">
            <div class="col-md-8 col-md-offset-2 analytics-box">
              <div class="form-group">
                <label for="">Please pick a type of analytics to install:</label>
                <select name="analytic_type[]" id="" class="form-control">
                    @foreach($analytic_types as $type)
                       <option value="{{ $type }}">{{ ucwords(str_replace('_', ' ', $type)) }}</option>
                    @endforeach
                </select>
                <br>
              </div>
              <div class="form-group">
                 <label for="">Please type/paste the code for this analytic:</label>
                 <textarea class="form-control" cols="5" rows="5" name="analytic_code[]" required></textarea>
                 <br>
              </div>
         </div>
       </div>
       <button class="btn btn-primary btn-block" id="applyAnalytics" type="submit" {{ $store->vendor->hasAnalytics() ? '' : 'disabled'}}>Apply Changes</button>
    </form>

这是我想要“命中”的控制器方法:

public function updateAnalytics(Request $request)
    {
        try {
            $store = auth()->user()->store;
            auth()->user()->analytics()->delete();
            if($request->has('analytic_type')) {
                foreach($request->analytic_type as $index => $value) {
                    Analytics::create([
                        'user_id' => auth()->user()->id,
                        'analyticable_id' => $store->id,
                        'analyticable_type' => get_class($store),
                        'method_type' => $request->analytic_type[$index],
                        'method_code' => $request->analytic_code[$index],
                    ]);
                }
            }    
            flash(__("Common.Saved_Successfully"));
        } catch (\Exception $e) {
            session()->flash('title', __("Common.Error"));
            session()->flash('message', __("Common.An_Error_Happened"));
            session()->flash('message-class', "error");
        }
        return redirect()->back();
    }

如果我在 textarea 中输入普通文本或代码,此方法在本地运行良好,但如果我尝试输入并提交以下代码块,一切都会崩溃,此代码块是Facebook Pixel提供给其用户的代码块,我想保存在我的数据库中:

<!-- Facebook Pixel Code -->
<script>
  !function(f,b,e,v,n,t,s)
  {if(f.fbq)return;n=f.fbq=function(){n.callMethod?
  n.callMethod.apply(n,arguments):n.queue.push(arguments)};
  if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0';
  n.queue=[];t=b.createElement(e);t.async=!0;
  t.src=v;s=b.getElementsByTagName(e)[0];
  s.parentNode.insertBefore(t,s)}(window, document,'script',
  'https://connect.facebook.net/en_US/fbevents.js');
  fbq('init', '339673053324500');
  fbq('track', 'PageView');
</script>
<noscript><img height="1" width="1" style="display:none"
  src="https://www.facebook.com/tr?id=339673053324500&ev=PageView&noscript=1"
/></noscript>
<!-- End Facebook Pixel Code -->

如果我将上面的代码放入文本区域并将数据提交到服务器,则会出现以下错误:

禁止的

您无权访问此服务器上的 /app/public/vendor/store/settings/analytics/update。此外,在尝试使用 ErrorDocument 处理请求时遇到 403 Forbidden 错误。

只要我提交代码,服务器甚至不允许我访问有问题的路由或此表单中的任何其他路由。

笔记:

这可能不是一个实际的权限问题,而是一个与安全相关的事情,因为我已经尝试将服务器上所有相关文件的权限从 0644 更改为 0755 并且没有任何改变,当然我可能在此过程中做错了什么,欢迎所有建议。

标签: phpmysqllaravelapachepermissions

解决方案


推荐阅读