跳到主要內容

發表文章

PostgreSQL的全文搜尋插件

PostgreSQL實在是包山包海,最近發現竟然有支援中文全文搜尋的套件PGroonga,以下簡單介紹一下。 開頭 PostgreSQL原生就有to_tsvector可以處理英文的全文搜尋,包含刪除停止詞、詞性還原等,做英文的全文搜尋很夠用了,但to_tsvector不支援中日韓等方塊字。 PGroonga支援中日韓及英文等全部語言,他是用Ngram的方式切詞,預設是切兩個字,例如「偉大的PostgreSQL」會切成: 偉大 大的 的P Po os st tg gr re eS SQ QL 並用這種方式建立索引,檢索效果不錯,10幾億字內容約1~2秒可以完成搜尋(部份視硬體設備而定),就是索引稍大,建立索引的時間約要10幾分鐘。 實做 PGroonga的使用方式,首先要先下載安裝PostgreSQL: https://www.postgresql.org/download/ 不一定要最新版,PGroonga從早期的12版到最新的17版都支援。 然後在github上找「awesome-postgres」 https://github.com/dhamaniasad/awesome-postgres 然後在「Extensions」項目中找「PGroonga」的連結並進入「install」。 PGroonga支援很多os,以windows來說,先按照安裝的PostgreSQL下載安裝檔,安裝檔是一個zip檔案,解壓縮後把檔案複製到PostgreSQL資料夾,並覆蓋舊檔便安裝成功了。 安裝完後要啟動pgAdmin,倒不一定要pgAdmin,反正就是進入可以輸入SQL語法的界面就是了。然後輸入 create extension pgroonga; 執行成功即啟動pgroonga了,接著是建立pgroonga的索引,例如 create index idx_欄位名稱 on news using pgroonga (欄位名稱); 建立索引的時間視資料量多寡而定,量多自然要等久一點。索引建立後便可搜尋,簡易的搜尋語法如下: select * from 資料表 where (建立pgroonga索引的欄位) &@~ '文字'; 可以查詢單一文字 select * from 資料表 where (建立pgroonga索引的欄位) &@| ARRAY[...
最近的文章

網站掃描CSP弱點問題

 最近被網站弱點掃描的CSP問題困擾很久,CSP問題主要是兩種: 1.在CSP中允許內聯腳本執行 2.從CSP中缺少必要的指令 AppScan這兩個問題提供的處理方式都是「配置正確值的Content-Security-Policy」,等於沒說。 後來才發現AppScan無法處理多層的Content-Security-Policy,例如在httpd.conf中設定: default-src 'self' 'unsafe-inline'; 又在htaccess設定 script-src 'self'; 正常來說瀏覽器會採用htaccess的設定,即「script-src 'self';」而不是「script-src 'self' 'unsafe-inline'」,以安全性來說是符合的,但AppScan無法判斷,直接當你沒設定好CSP,解決方法只有不要重複設定,保留一項設定就好。

Windows使用Apache/WIN-ACME申請免費Let's Encrypt的SSL憑證

  在Windows下使用Apache架站時,申請Let's Encrypt的SSL憑證的步驟: 1.確認web的port 80可以連線 有http自動轉https的話要關掉 2.下載win-acme https://www.win-acme.com/ 解壓縮後執行wacs.exe(可能要管理員權限) 3.wacs.exe操作如下 選m 選2 輸入網址(不用加https) 選4 選1 輸入網站根目錄位置 選2 選2 輸入存檔SSL憑證的位置 選1 選5 選3 之後enter按到底,會開始自動申請憑證,申請成功後按q離開wacs.exe 4.修改http-ssl.conf 加入或修改下面三行 SSLCertificateFile "SSL憑證存檔位置/網站名稱-crt.pem" SSLCertificateKeyFile "SSL憑證存檔位置/網站名稱-key.pem" SSLCertificateChainFile "SSL憑證存檔位置/網站名稱-chain.pem" 5.重啟apache 6.自動更新憑證 寫一個bat,加到工作排程 cd C:/win-acme(就是解壓縮win-acme的地方) wacs.exe --renew --force net stop Apache2.4 && net start Apache2.4

網站弱點掃描幾個問題

 1.盲目的LDAP注入 主要是特殊符號的關係,前後台的輸入都要過濾掉下面文字: = > < | & ! \\ * ( ) \x00 %29 %7C %28 %3D 不過經過多次的測試,這項弱點多是誤判,例如在「有傳入值印出B,不然印出C」的情況下,假如傳入的值經過篩選後變成空值,卻還是印出C,很容易就會造成誤判。 因此如果已經篩選掉上面的文字了,卻還是不能過關,很有可能程式的流程也要修改,盡量避免無傳入值還是會印出資料的狀況。假如一定要這樣寫的話,就要檢查傳入值的存在(isset),不要用有無(empty)。 2.低強度密碼組合 - ROBOT攻擊:伺服器支援有漏洞的密碼組合 在httpd.conf中加入下面三行: SSLProtocol all -SSLv2 -SSLv3 SSLHonorCipherOrder off SSLCipherSuite ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384 3.查詢中的Password參數 GET、POST不能使用「word」「author」等關鍵字。

主機標頭注入的測試與應對

最近處理「主機標頭注入」弱點,花了很大力氣,總算告一段落,把相關資料筆記起來。 1.主機標頭注入是啥 弱點掃描的描述永遠是上個世紀的翻譯軟體做的,有時候寧願顯示英文orz 簡單的說就是在開啟網頁時,另外輸入header資訊,導致網站發生錯誤。 2.如何測試主機標頭注入 以PHP來說,$_SERVER['HTTP_HOST']可以取得host資料,範例如下 執行起來會是下面狀況 會把IP或網址印出來,主機標頭注入就是把HOST改掉,測試方式要使用curl。 windows版請到這裡下載:https://curl.se/download.html 下載後解壓縮,進入curl.exe所在的資料夾,開啟終端機,輸入下面指令 塗掉的地方就是網站的IP或網址,這時候可以發現$_SERVER['HTTP_HOST']的資訊被改掉了,印出的是輸入的測試資料「www.123.com」。 3.如何防範主機標頭注入 這個問題在網路上找了很久,各家方法都有,但最簡單的是改.htaccess檔,加入這幾行: RewriteEngine On  RewriteCond %{HTTP_HOST} !^ 網址或IP [NC] RewriteCond %{REQUEST_URI} !^/error [NC] RewriteRule ^.(.*) - [L,F] 這時再用curl測試,跑出來的就是403了,解決。

Google 分析 (Google Analytics) 造成的「加密的階段作業 (SSL) Cookie 中遺漏安全屬性」

 Google 分析 (Google Analytics) 的cookies會造成「加密的階段作業 (SSL) Cookie 中遺漏安全屬性」的弱點,網路上有一種解決方式,在gtag中加上參數,如下: gtag('config', 'G-XXXXXXXXXX', {'cookieFlags': 'SameSite=Strict; Secure'}); 但我的系統卻無法使用,研究了一下,要拆開寫,如下   gtag('set', 'cookie_flags', 'SameSite=Strict;Secure');   gtag('config', 'G-XXXXXXXXXX'); 要拆成兩行,Secure就可以用了。 但更簡單的方法是在httpd.conf中加入這一行 Header edit Set-Cookie ^(.*)$ $1;HttpOnly;Secure;SameSite=Strict 解決。

Sphinx 3 設定

Sphinx是歷史悠久的php全文搜尋引擎,最近把舊的系統換成Sphinx,隨便記一點東西,以防忘記。 1.安裝及相關說明 參考 https://blog.csdn.net/XBODHX/article/details/107378182 mysql的設定方式,上面網站說得很詳細了。 改路徑及DB設定即可。 2.XML資料源 要在Sphinx使用XML當作資料,要先把XML按照下面格式整理 http://sphinxsearch.com/docs/current/xmlpipe2.html sphinx.conf設定如下 source (索引名稱) {     type  = xmlpipe2     xmlpipe_command = cat (xml檔案所在路徑)     xmlpipe_field = (subject)     xmlpipe_field = (content 預設是這兩個文字欄位,可以按XML內容修改)     xmlpipe_attr_uint = (要另外存的欄位,限數字)     xmlpipe_fixup_utf8 = 1 } index (自訂索引名稱,跟上面的不一樣) {     source = (索引名稱)     path = (索引檔路徑)     mlock = 0     morphology = none     min_word_len = 1     ngram_len = 1(是否分詞,1是,0否)     ngram_chars = (分詞的字碼,ngram_len = 0的話無用)     html_strip = 0(是否刪除html tags,0不刪,1刪除) } 其餘的跟mysql一樣,要注意windows底下可能沒有「cat」可以用(在xmlpipe_command 那邊),把cat改成type即可。 3.searchd 設定 如果設定的sphinx.conf有改名,或者indexer的參數不是sphinx.con...