POST TIME:2018-09-02 13:02
Dedecms5.1隨便搜索一串數字出錯
提示信息如下:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server
version for the right syntax to use near ‘) limit 500′ at line 1 – Execute Query False!
Select aid from dede_full_search where arcrank > -1 and () limit 500
因搜索未過濾html標簽,導致用戶可以在搜索出注入html代碼,該補丁修改該問題和utf-8版tag標簽找不到以及部分用戶尾部丟0的問題
覆蓋補丁后請在后臺 內容維護 搜索關鍵詞管理 處刪除不正常的關鍵詞。
解決方法:官方已經出補丁了
非5.1版請修改 plus/search.php文件
把Copy code$keyword = ereg_replace(”[|"rnt%*?()$;,'%-]“,” “,trim($keyword));
替換為Copy code$keyword = ereg_replace(”[|"rnt%*?()$;,'%<>]“,” “,trim($keyword));
2 提高DEDE搜索功能準確度的方法
請原來的模板的
<form action=”{dede:field name=’phpurl’/}/search.php” name=”formsearch”>
<input type=”hidden” name=”kwtype” value=”0″>
改成
<form action=”{dede:field name=’phpurl’/}/search.php” name=”formsearch”>
<input type=”hidden” name=”kwtype” value=”1″>
即0改成1
采用“僅搜索標題”的搜索方式,
<option value=”title” selected>搜索標題</option> 可將這個設為默認,或者干脆刪除下面的智能模糊,那個太不準。
<option value=”titlekeyword”>智能搜索</option>
高級搜索中,可以將模板中的“與”改成默認
<input type=”radio” name=”kwtype” value=”1″ checked=”checked”/>
與
<input name=”kwtype” type=”radio” value=”0″ />
或
“與”應該就是value=”1″的意思,下面的同樣采用“僅搜索標題”的方式
總的說來就是“與”(value=”1″)+“僅搜索標題”=準確
3 站內搜索增加個僅搜索當前頻道功能
其實自己有搜索框加一個欄目選擇的項就行了,系統不必要自動去生成高級搜索里可選的條件,你全都可以用
<select name=”channeltype” id=”channeltype” style=”width:100″>
<option value=”0″ selected>–不限–</option>
<option value=’4′>Flash</option>
<option value=’3′>軟件</option>
<option value=’2′>圖片集</option>
<option value=’1′>普通文章</option>
</select>
如果不想用戶選擇,你直接加
<input type=’hidden’ name=’channeltype’ value=”{dede:field name=’channeltype’/}”>
這樣也行
4 如何設置讓搜索條可以搜一個漢字
需要修改2個地方
/plus/search.php
if($keyword==”"||strlen($keyword)<1){
ShowMsg(”關鍵字不能小于1個字節!”,”-1″);
exit();
}
/include/inc_arcsearch_view.php
codeif(strlen($k)<2) continue;
5 文章關鍵字自動對應搜索的辦法
{dede:field name=’keywords’ runphp=’yes’ }
if(!empty(@me)){
$kws = explode(’ ‘,@me);
@me = “”;
foreach($kws as $k){
@me .= “<a href=’/cms/plus/search.php?keyword=”.urlencode($k).”‘ >$k</a> “;
}
@me= str_replace(’+’, ‘ ‘,trim(@me));
}