【问题标题】:Laravel Code working on the Localhost but Fail on the serverLaravel 代码在本地主机上工作但在服务器上失败
【发布时间】:2014-12-26 23:32:34
【问题描述】:

我有一个简单的 Ajax Jquery 函数,它发布编辑过的文章数据,然后路由到控制器


//Controller articleManagement
    function editArticle(){
        $a=$this->inputs;
        $response=DB::table('articles')
            ->where('id', $a["id"])
            ->update(array($a["column"] => $a["val"]));
        return $response;
    }

//routes.php
Route::post('/xarticle', "articleManagement@editArticle");

//ajax Jquery
           $.ajax({
                type: "POST",
                url: "/xarticle",
                data: {
                    id:id,
                    val:eval("CKEDITOR.instances.content"+id+".getData()"),
                    column:"content"
                },
                success:function(data){
                    data=Number(data);
                    Boolean(data)?alertify.success("Data successfully updated."):alertify.error("Nothing was updated.");
                }
            });

当我在 localhost 中使用各种 val 时,上面的代码可以完美运行。但在远程服务器上的生产中,它以较小的值工作,例如“Hello World”“bla bla bla bla bla”,但是当我想发布一篇文章并返回 404 not found page 错误时它会失败。

这个错误出现在 laravel.log 中

[2014-12-26 23:20:07] production.ERROR: exception 'Symfony\Component\HttpKernel\Exception\NotFoundHttpException' 
Stack trace:
#0 /home/yahyouha/html/bootstrap/compiled.php(3238): Illuminate\Foundation\Application->abort(404)
#1 /home/yahyouha/html/app/routes.php(53): Illuminate\Support\Facades\Facade::__callStatic('abort', Array)
#2 /home/yahyouha/html/app/routes.php(53): Illuminate\Support\Facades\App::abort(404)
#3 [internal function]: {closure}('xarticle')
#4 /home/yahyouha/html/bootstrap/compiled.php(5331): call_user_func_array(Object(Closure), Array)
#5 /home/yahyouha/html/bootstrap/compiled.php(4998): Illuminate\Routing\Route->run(Object(Illuminate\Http\Request))
#6 /home/yahyouha/html/bootstrap/compiled.php(4986): Illuminate\Routing\Router->dispatchToRoute(Object(Illuminate\Http\Request))
#7 /home/yahyouha/html/bootstrap/compiled.php(715): Illuminate\Routing\Router->dispatch(Object(Illuminate\Http\Request))
#8 /home/yahyouha/html/bootstrap/compiled.php(696): Illuminate\Foundation\Application->dispatch(Object(Illuminate\Http\Request))
#9 /home/yahyouha/html/bootstrap/compiled.php(7746): Illuminate\Foundation\Application->handle(Object(Illuminate\Http\Request), 1, true)
#10 /home/yahyouha/html/bootstrap/compiled.php(8353): Illuminate\Session\Middleware->handle(Object(Illuminate\Http\Request), 1, true)
#11 /home/yahyouha/html/bootstrap/compiled.php(8300): Illuminate\Cookie\Queue->handle(Object(Illuminate\Http\Request), 1, true)
#12 /home/yahyouha/html/bootstrap/compiled.php(10962): Illuminate\Cookie\Guard->handle(Object(Illuminate\Http\Request), 1, true)
#13 /home/yahyouha/html/bootstrap/compiled.php(657): Stack\StackedHttpKernel->handle(Object(Illuminate\Http\Request))
#14 /home/yahyouha/public_html/index.php(49): Illuminate\Foundation\Application->run()
#15 {main} [] []

编辑

我注意到,如果我删除图像代码和其他一些字符,它开始工作,可能是 apache 的一些配置不接受特殊字符来发布以防止注入?

【问题讨论】:

  • 您是否排除了 eval 语句中的错误?我会为每个请求记录这个值eval("CKEDITOR.instances.content"+id+".getData()")
  • @EruPenkman 我已经将这段代码传递给了 console.log();它只是返回类似于“ bla bla bla的东西
  • @EruPenkman 但是当我不输入任何新行时,",' 代码有效,所以我认为这与由于这些字符的存在而拒绝发送 ajax 帖子的事实有关。值得一提的是,该代码在我的本地主机上完美运行
  • 更新了我的答案,我认为你是对的,你应该能够通过从 js 编码 html 然后在 php 中解码来绕过该过滤器

标签: php jquery ajax laravel


【解决方案1】:

我认为您是正确的,服务器正在过滤包含 HTML 的 POST 正文,可能使用mod_security rules。您可能可以通过使用

对html片段进行编码来解决这个问题
val: encodeURIComponent(htmlFragment)

在 php 中你必须对其进行解码(但也许 php 会自动为你完成)

urldecode($a["val"])

http://php.net/manual/en/function.urldecode.php http://www.w3schools.com/jsref/jsref_encodeuricomponent.asp

【讨论】:

  • 感谢您的回答,但我的 id 只是一个数字,为​​什么需要任何编码?
  • 嗯你的权利,我认为帖子正文甚至不需要编码,一定是一个不同的问题
  • 也许有人注入了数据,使其不再只是一个简单的数字?
  • 我认为当我使用没有 " 或 ' 的简单 时,它很可能与阻止 ajax 请求有关。我只是不知道它可能是什么。跨度>
  • 所以您尝试了 encodeURIComponenet 并且仍然被阻止?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-07-23
  • 2020-12-12
  • 2013-04-14
  • 2017-02-17
  • 1970-01-01
  • 2015-09-11
  • 1970-01-01
相关资源
最近更新 更多