【发布时间】: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 中解码来绕过该过滤器