2016-05-23 36 views
0

我有一个base64编码字符串,像这样: eyJjb3VudCI6IjAiLCJzdmNubyI6IjI0OTAiLCJzdGFydGR0IjoiMjAxNi0wNS0xNiAxMToxOTowMC4wIiwiaW5zdGFsbF9uYW1lIjoiIiwiY29ubmVjdGl2aXR5dGhyb3VnaGxpc3QiOiIiLCJyZXZlbnVlY2l0eSI6IiIsIm9iX2J5dGVzb3V0IjoiMCIsImN1c3RvbWVydHlwZSI6IiIsImNhbmNlbGR0IjoiIiwidXNlc3VtIjoiZmFsc2UiLCJhY3RjYXQiOiIyIiwiYmFsYnl0ZXNpbiI6Ii0xIiwicGtndHlwZSI6Ik8iLCJwa2dpZCI6Ik9TQjRtYnBzNDBHQjFtYnBzVUwiLCJpbnN0YWxsX3dlYiI6IiIsInBvZCI6IiIsInN0YXR1cyI6IjAiLCJiYWxzZWNvbmRzIjoiLTEiLCJjb3VudHJ5bm8iOiIiLCJpbnN0YWxsX2NpdHkiOiIiLCJpbnN0YWxsX2VtYWlsIjoiIiwic2Vjb25kYXJ5cG9kY29kZSI6IiIsImFjdG5vIjoiNjA1MTMiLCJtb25leWJhbCI6IiIsImFjdG5hbWUiOiJPc2JuZXQiLCJkb21ubyI6IjIwIiwibXVsdGkiOiJ0cnVlIiwibGFzdG1pbGVubyI6IiIsImV4cGlyZWR0IjoiIiwic3RhcnREYXRlIjoiMjAxNi0wNS0xNiAxMToxOTowMC4wIiwic3ZjdHlwZSI6IkludGVybmV0IEFjY2VzcyIsImluc3RhbGxfcGhvbmUiOiIiLCJpbnN0YWxsX2FkZHJlc3MiOiIiLCJyYXRlUGxhbiI6Ik9TQjRtYnBzNDBHQjFtYnBzVUwiLCJyYWRkZXB0Y29kZSI6IiIsImluc3RhbGxfcGluIjoiIiwib2JfYnl0ZXNpbiI6IjAiLCJzZXNjb3VudCI6IjEiLCJzdmNkZXNjciI6Ik9TQjRtYnBzNDBHQjFtYnBzVUwiLCJyZW5ld2R0IjoiIiwic3Vic25vIjoiMTkxMzQzNiIsInNhbWVhc2JpbGwiOiJ0cnVlIiwiaW5zdGFsbF9yZW1hcmtzIjoiIiwiZG9taWQiOiJvc2JuZXRicm9hZGJhbmQiLCJpbnN0YWxsX2ZheCI6IiIsImFjdGlkIjoib3NibmV0IiwiY3BubyI6IiIsImFjdHN0YXR1cyI6IjAiLCJwb3J0bm8iOiIiLCJwcmltYXJ5cG9kY29kZSI6IiIsImV4dGVybmFsaWQiOiIiLCJjcmVhdGVkdCI6IjIwMTYtMDUtMTYgMTE6MTk6NDIuMCIsImRldmljZSI6IiIsImJhbGJ5dGVzb3V0IjoiLTEiLCJvYl9zZWNvbmRzIjoiMCIsImV4cGlyeWR0IjoiMjAxNi0wNi0xNSAxMToxOTowMC4wIiwiQ3VzdG9tZXIiOnsibmFtZSI6Ik9zYm5ldCIsImVtYWlsIjoibmFyZXNoLmNoYXZhbjg5QGdtYWlsLmNvbSIsInBob25lIjoiIiwiYWRkcmVzcyI6IlN1cGVyIE1hcmtldCIsImNpdHluYW1lIjoiQmFuZ2Fsb3JlIn0sInJlbmV3YWxEYXRlIjoiIiwibmV4dFJlbmV3YWxEYXRlIjoiMTUgSnVuIDIwMTYiLCJwYWNrYWdlQW10IjoiMyIsIlRheCI6MC40MzUsIlRheFBlcmNlbnQiOiIxNC41IiwiY29udmVuaWVuY2VGZWUiOjAuMDY4NywiVG90YWwiOjMuNTAzNywicGFja2FnZVRvdGFsIjozLjQzNX0=为什么通过CI XSS Filter运行POST变量会截断base64字符串?

当我把它POST到PHP服务器并接收它像

$base64String = $this->input->post('base64', TRUE);

我得到eyJjb VudCI6IjAiLCJzdmNubyI6IjI0OTAiLCJzdGFydGR0IjoiMjAxNi0wNS0xNiAxMToxOTowMC4wIiwiaW5zdGFsbF9uYW1lIjoiIiwiY29ubmVjdGl2aXR5dGhyb3VnaGxpc3QiOiIiLCJyZXZlbnVlY2l0eSI6IiIsIm9iX2J5dGVzb3V0IjoiMCIsImN1c3RvbWVydHlwZSI6IiIsImNhbmNlbGR0IjoiIiwidXNlc3VtIjoiZmFsc2UiLCJhY3RjYXQiOiIyIiwiYmFsYnl0ZXNpbiI6Ii0xIiwicGtndHlwZSI6Ik8iLCJwa2dpZCI6Ik9TQjRtYnBzNDBHQjFtYnBzVUwiLCJpbnN0YWxsX3dlYiI6IiIsInBvZCI6IiIsInN0YXR1cyI6IjAiLCJiYWxzZWNvbmRzIjoiLTEiLCJjb3VudHJ5bm8iOiIiLCJpbnN0YWxsX2NpdHkiOiIiLCJpbnN0YWxsX2VtYWlsIjoiIiwic2Vjb25kYXJ5cG9kY29kZSI6IiIsImFjdG5vIjoiNjA1MTMiLCJtb25leWJhbCI6IiIsImFjdG5hbWUiOiJPc2JuZXQiLCJkb21ubyI6IjIwIiwibXVsdGkiOiJ0cnVlIiwibGFzdG1pbGVubyI6IiIsImV4cGlyZWR0IjoiIiwic3RhcnREYXRlIjoiMjAxNi0wNS0xNiAxMToxOTowMC4wIiwic3ZjdHlwZSI6IkludGVybmV0IEFjY2VzcyIsImluc3RhbGxfcGhvbmUiOiIiLCJpbnN0YWxsX2FkZHJlc3MiOiIiLCJyYXRlUGxhbiI6Ik9TQjRtYnBzNDBHQjFtYnBzVUwiLCJyYWRkZXB0Y29kZSI6IiIsImluc3RhbGxfcGluIjoiIiwib2JfYnl0ZXNpbiI6IjAiLCJzZXNjb3VudCI6IjEiLCJzdmNkZXNjciI6Ik9TQjRtYnBzNDBHQjFtYnBzVUwiLCJyZW5ld2R0IjoiIiwic3Vic25vIjoiMTkxMzQzNiIsInNhbWVhc2JpbGwiOiJ0cnVlIiwiaW5zdGFsbF9yZW1hcmtzIjoiIiwiZG9taWQiOiJvc2JuZXRicm9hZGJhbmQiLCJpbnN0YWxsX2ZheCI6IiIsImFjdGlkIjoib3NibmV0IiwiY3BubyI6IiIsImFjdHN0YXR1cyI6IjAiLCJwb3J0bm8iOiIiLCJwcmltYXJ5cG9kY29kZSI6IiIsImV4dGVybmFsaWQiOiIiLCJjcmVhdGVkdCI6IjIwMTYtMDUtMTYgMTE6MTk6NDIuMCIsImRldmljZSI6IiIsImJhbGJ5dGVzb3V0IjoiLTEiLCJvYl9zZWNvbmRzIjoiMCIsImV4cGlyeWR0IjoiMjAxNi0wNi0xNSAxMToxOTowMC4wIiwiQ3VzdG9tZXIi

(中间有空格和回车在前5个字符后返回)。但是,当我从CI的post()方法中删除TRUE标志时,我得到一个完整的base64字符串。

这是CI的XSS过滤器或XSS过滤器的缺陷吗? :/

编辑:空格和回车后第5个字符不是通用的。它发生在这个特定的字符串中。我还没有尝试过任何其他base64字符串。

回答

0

我不知道为什么这个问题,但如果你发布base64那么你应该使用JSON.stringify。

var finalCanvas2 = finalCanvas.toDataURL(); 
data += '&Base64=' + JSON.stringify(finalCanvas2); 

,并在接收器端你只需要 取出后和文件管理器。

$this->input->post('Base64'); 
    list($type, $data) = explode(';', $Base64); 
    list(, $data) = explode(',', $data); 
    $data = base64_decode($data); 
    file_put_contents('first.png' , $data); 
0

XSS过于激进。我设法通过编辑系统/核心解决这一/ Security.php

$evil_attributes

删除 'on\w*'
相关问题