PHP - Laravel: получение ошибки 403 при попытке сохранить код JavaScript в базе данных MySQL - PullRequest
2 голосов
/ 11 марта 2019

Я знаю, что это, как правило, осуждается, но по моим конкретным причинам, о которых я скажу ниже, мне нужна эта функциональность:

Итак, на этом веб-сайте мы разрешаем пользователямпокупать «магазины», в которых они могут продавать товары, и теперь эти пользователи хотят добавлять в свои магазины такие вещи, как «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();
    }

Этот метод отлично работает локально, если я ввожу обычный текст или код в текстовую область, но если я попыталсячтобы ввести и отправить приведенный ниже блок кода, все взрывается, этот блок кода предоставляется 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 на этом сервере.Кроме того, возникла ошибка 403 Forbidden при попытке использовать ErrorDocument для обработки запроса.

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

Примечание:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...