mirror of
https://github.com/Lastorder-DC/rhymix.git
synced 2026-05-10 04:24:14 +09:00
fixed XSS security in integration search
git-svn-id: http://xe-core.googlecode.com/svn/branches/1.5.0@9839 201d5d3c-b55e-5fd7-737f-ddc643e51545
This commit is contained in:
parent
75d660bf1a
commit
0dbd9091b0
6 changed files with 36 additions and 24 deletions
|
|
@ -789,7 +789,7 @@ class Context {
|
||||||
* @brief make URL with args_list upon request URL
|
* @brief make URL with args_list upon request URL
|
||||||
* @return result URL
|
* @return result URL
|
||||||
**/
|
**/
|
||||||
function getUrl($num_args=0, $args_list=array(), $domain = null, $encode = true, $auto = false) {
|
function getUrl($num_args=0, $args_list=array(), $domain = null, $encode = true, $autoEncode = false) {
|
||||||
static $site_module_info = null;
|
static $site_module_info = null;
|
||||||
static $current_info = null;
|
static $current_info = null;
|
||||||
|
|
||||||
|
|
@ -936,21 +936,22 @@ class Context {
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($encode){
|
if ($encode){
|
||||||
if($auto){
|
if($autoEncode){
|
||||||
$parsedUrl = parse_url($query);
|
$parsedUrl = parse_url($query);
|
||||||
parse_str($parsedUrl['query'], $output);
|
parse_str($parsedUrl['query'], $output);
|
||||||
$encode_queries = array();
|
$encode_queries = array();
|
||||||
foreach($output as $key=>$value){
|
foreach($output as $key=>$value){
|
||||||
if (!preg_match('/&([a-z]{2,}|#\d+);/', $value)){
|
if (preg_match('/&([a-z]{2,}|#\d+);/', urldecode($value))){
|
||||||
$value = htmlspecialchars($value);
|
$value = urlencode(htmlspecialchars_decode(urldecode($value)));
|
||||||
}
|
}
|
||||||
$encode_queries[] = $key.'='.$value;
|
$encode_queries[] = $key.'='.$value;
|
||||||
}
|
}
|
||||||
$encode_query = implode('&', $encode_queries);
|
$encode_query = implode('&', $encode_queries);
|
||||||
return $parsedUrl['path'].'?'.$encode_query;
|
return htmlspecialchars($parsedUrl['path'].'?'.$encode_query);
|
||||||
}
|
}
|
||||||
else
|
else{
|
||||||
return htmlspecialchars($query);
|
return htmlspecialchars($query);
|
||||||
|
}
|
||||||
}else{
|
}else{
|
||||||
return $query;
|
return $query;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -27,7 +27,15 @@
|
||||||
return $str;
|
return $str;
|
||||||
}
|
}
|
||||||
');
|
');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ( !function_exists('htmlspecialchars_decode') )
|
||||||
|
{
|
||||||
|
function htmlspecialchars_decode($text)
|
||||||
|
{
|
||||||
|
return strtr($text, array_flip(get_html_translation_table(HTML_SPECIALCHARS)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// time zone
|
// time zone
|
||||||
$time_zone = array(
|
$time_zone = array(
|
||||||
|
|
|
||||||
|
|
@ -98,6 +98,9 @@
|
||||||
} else {
|
} else {
|
||||||
$this->setTemplateFile("no_keywords");
|
$this->setTemplateFile("no_keywords");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$security = new Security();
|
||||||
|
$security->encodeHTML('is_keyword', 'search_target', 'where', 'page');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
?>
|
?>
|
||||||
|
|
|
||||||
|
|
@ -37,17 +37,17 @@
|
||||||
|
|
||||||
<!--@if($where == 'document' && $output->page_navigation)-->
|
<!--@if($where == 'document' && $output->page_navigation)-->
|
||||||
<div class="pagination a1">
|
<div class="pagination a1">
|
||||||
<a href="{getUrl('page','')}" class="prevEnd">{$lang->first_page}</a>
|
<a href="{getAutoEncodedUrl('page','')}" class="prevEnd">{$lang->first_page}</a>
|
||||||
<!--@while($page_no = $output->page_navigation->getNextPage())-->
|
<!--@while($page_no = $output->page_navigation->getNextPage())-->
|
||||||
<!--@if($page == $page_no)-->
|
<!--@if($page == $page_no)-->
|
||||||
<strong>{$page_no}</strong>
|
<strong>{$page_no}</strong>
|
||||||
<!--@else-->
|
<!--@else-->
|
||||||
<a href="{getUrl('page',$page_no)}">{$page_no}</a>
|
<a href="{getAutoEncodedUrl('page',$page_no)}">{$page_no}</a>
|
||||||
<!--@end-->
|
<!--@end-->
|
||||||
<!--@end-->
|
<!--@end-->
|
||||||
<a href="{getUrl('page',$output->page_navigation->last_page)}" <!--@if(!$last_division)-->class="nextEnd"<!--@end-->>{$lang->last_page}</a>
|
<a href="{getAutoEncodedUrl('page',$output->page_navigation->last_page)}" <!--@if(!$last_division)-->class="nextEnd"<!--@end-->>{$lang->last_page}</a>
|
||||||
<!--@if($last_division)-->
|
<!--@if($last_division)-->
|
||||||
<a href="{getUrl('page',1,'document_srl','','search_target',$search_target,'is_keyword',$is_keyword,'division',$last_division,'last_division','')}" class="nextEnd">{$lang->cmd_search_next}</a>
|
<a href="{getAutoEncodedUrl('page',1,'document_srl','','search_target',$search_target,'is_keyword',$is_keyword,'division',$last_division,'last_division','')}" class="nextEnd">{$lang->cmd_search_next}</a>
|
||||||
<!--@end-->
|
<!--@end-->
|
||||||
</div>
|
</div>
|
||||||
<!--@end-->
|
<!--@end-->
|
||||||
|
|
|
||||||
|
|
@ -19,17 +19,17 @@
|
||||||
<input type="hidden" name="act" value="IS" />
|
<input type="hidden" name="act" value="IS" />
|
||||||
<input type="hidden" name="where" value="{$where}" />
|
<input type="hidden" name="where" value="{$where}" />
|
||||||
<input type="hidden" name="search_target" value="title_content" />
|
<input type="hidden" name="search_target" value="title_content" />
|
||||||
<input name="is_keyword" type="text" class="inputText" value="{htmlspecialchars($is_keyword)}"/>
|
<input name="is_keyword" type="text" class="inputText" value="{$is_keyword}"/>
|
||||||
<span class="button large strong black"><input type="submit" value="{$lang->cmd_search}" /></span>
|
<span class="button large strong black"><input type="submit" value="{$lang->cmd_search}" /></span>
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<ul class="localNavigation">
|
<ul class="localNavigation">
|
||||||
<li <!--@if(!$where)-->class="on"<!--@end-->><a href="{getUrl('where','','page','','division','')}">{$lang->integration_search}</a></li>
|
<li <!--@if(!$where)-->class="on"<!--@end-->><a href="{getAutoEncodedUrl('where','','page','','division','')}">{$lang->integration_search}</a></li>
|
||||||
<li <!--@if($where=='document')-->class="on"<!--@end-->><a href="{getUrl('where','document','page',1,'division','')}">{$lang->document}</a></li>
|
<li <!--@if($where=='document')-->class="on"<!--@end-->><a href="{getAutoEncodedUrl('where','document','page',1,'division','')}">{$lang->document}</a></li>
|
||||||
<li <!--@if($where=='comment')-->class="on"<!--@end-->><a href="{getUrl('where','comment','page',1,'division','')}">{$lang->comment}</a></li>
|
<li <!--@if($where=='comment')-->class="on"<!--@end-->><a href="{getAutoEncodedUrl('where','comment','page',1,'division','')}">{$lang->comment}</a></li>
|
||||||
<li <!--@if($where=='trackback')-->class="on"<!--@end-->><a href="{getUrl('where','trackback','page',1,'division','')}">{$lang->trackback}</a></li>
|
<li <!--@if($where=='trackback')-->class="on"<!--@end-->><a href="{getAutoEncodedUrl('where','trackback','page',1,'division','')}">{$lang->trackback}</a></li>
|
||||||
<li <!--@if($where=='multimedia')-->class="on"<!--@end-->><a href="{getUrl('where','multimedia','page',1,'division','')}">{$lang->multimedia}</a></li>
|
<li <!--@if($where=='multimedia')-->class="on"<!--@end-->><a href="{getAutoEncodedUrl('where','multimedia','page',1,'division','')}">{$lang->multimedia}</a></li>
|
||||||
<li <!--@if($where=='file')-->class="on"<!--@end-->><a href="{getUrl('where','file','page',1,'division','')}">{$lang->file}</a></li>
|
<li <!--@if($where=='file')-->class="on"<!--@end-->><a href="{getAutoEncodedUrl('where','file','page',1,'division','')}">{$lang->file}</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
<!--@end-->
|
<!--@end-->
|
||||||
|
|
|
||||||
|
|
@ -3,30 +3,30 @@
|
||||||
{@ $output = $search_result['document'] }
|
{@ $output = $search_result['document'] }
|
||||||
<!--#include("document.html")-->
|
<!--#include("document.html")-->
|
||||||
<!--@if(count($output->data))-->
|
<!--@if(count($output->data))-->
|
||||||
<div class="isMore"><a href="{getUrl('where','document','page',1)}">more</a></div>
|
<div class="isMore"><a href="{getAutoEncodedUrl('where','document','page',1)}">more</a></div>
|
||||||
<!--@end-->
|
<!--@end-->
|
||||||
|
|
||||||
{@ $output = $search_result['comment'] }
|
{@ $output = $search_result['comment'] }
|
||||||
<!--#include("comment.html")-->
|
<!--#include("comment.html")-->
|
||||||
<!--@if(count($output->data))-->
|
<!--@if(count($output->data))-->
|
||||||
<div class="isMore"><a href="{getUrl('where','comment','page',1)}">more</a></div>
|
<div class="isMore"><a href="{getAutoEncodedUrl('where','comment','page',1)}">more</a></div>
|
||||||
<!--@end-->
|
<!--@end-->
|
||||||
|
|
||||||
{@ $output = $search_result['trackback'] }
|
{@ $output = $search_result['trackback'] }
|
||||||
{@ $search_target = 'title'; }
|
{@ $search_target = 'title'; }
|
||||||
<!--#include("trackback.html")-->
|
<!--#include("trackback.html")-->
|
||||||
<!--@if(count($output->data))-->
|
<!--@if(count($output->data))-->
|
||||||
<div class="isMore"><a href="{getUrl('where','trackback','page',1)}">more</a></div>
|
<div class="isMore"><a href="{getAutoEncodedUrl('where','trackback','page',1)}">more</a></div>
|
||||||
<!--@end-->
|
<!--@end-->
|
||||||
|
|
||||||
{@ $output = $search_result['multimedia'] }
|
{@ $output = $search_result['multimedia'] }
|
||||||
<!--#include("multimedia.html")-->
|
<!--#include("multimedia.html")-->
|
||||||
<!--@if(count($output->data))-->
|
<!--@if(count($output->data))-->
|
||||||
<div class="isMore"><a href="{getUrl('where','multimedia','page',1)}">more</a></div>
|
<div class="isMore"><a href="{getAutoEncodedUrl('where','multimedia','page',1)}">more</a></div>
|
||||||
<!--@end-->
|
<!--@end-->
|
||||||
|
|
||||||
{@ $output = $search_result['file'] }
|
{@ $output = $search_result['file'] }
|
||||||
<!--#include("file.html")-->
|
<!--#include("file.html")-->
|
||||||
<!--@if(count($output->data))-->
|
<!--@if(count($output->data))-->
|
||||||
<div class="isMore"><a href="{getUrl('where','file','page',1)}">more</a></div>
|
<div class="isMore"><a href="{getAutoEncodedUrl('where','file','page',1)}">more</a></div>
|
||||||
<!--@end-->
|
<!--@end-->
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue