2018年5月9日 星期三

php7.2連Sybase資料庫

環境:
OS:Ubuntu 18.04 Server
Apache2.4
PHP7.2

因PHP7.0以後無sybase相關function,需透過freetds為連線介接,再使用PDO相關function進行連線。
1. 安裝相關套件
sudo apt install php7.2-sybase
2.設定freetds
sudo vim /etc/freetds/freetds.conf [global]
        client charset = UTF-8
        charset = utf8

[sybase_db]
        host = db.com.tw
        port = 5000
        tds version = 5.0

3. 使用PDO function測試是否連線成功。
<?php
$db_host = "sybase_db";
$db_user = "帳號";
$db_pass = "密碼";
$db_select = "dbname";

$dbconnect = "dblib:host=".$db_host.";dbname=".$db_select;
$pdo_sybase = new PDO($dbconnect, $db_user, $db_pass);

$sql = "select * from sybase_table where 1=1";
$res = pdo_sybase->query($sql);
        while ($row = $res->fetch()){
                print_r($row);
        }
?>

Ubuntu 停用IPv6或以IPv4連線優先

環境:
OS:Ubuntu 18.04 Server

在預設狀況下,ipv4、ipv6是同時啟用的,但常發現會優先使用ipv6連線時連線很慢,等到ipv6無法連線時,才會改為ipv4連線,在這過程中已經浪費一些時間。改善此狀況有下列兩種方式。

方式一:停用ipv6,此方法網路上很多說明,但個人並不建議用此方法。
1. 編輯 sudo vim /etc/default/grub
GRUB_CMDLINE_LINUX="ipv6.disable=1"     #修改此行
2. 執行 sudo update-grub2
3. 重開機後以ifconfig 檢查是否關閉ipv6

方式二:以ipv4優先,此方法較理想,不需停用ipv6。
1. 編輯 sudo vim /etc/gai.conf
#For sites which prefer IPv4 connections change the last line to
precedence ::ffff:0:0/96  100      #移除此行註解

2. ping google.com.tw 檢查是否以ipv4連線

2018年4月18日 星期三

Ubuntu Apache 2.4 正確使用conf、mods、sites等設定檔。

環境: 
OS:Ubuntu 14.04 Server 
Apache:2.4

一、目錄結構
/etc/apache2/
|-- apache2.conf
|-- conf-available
|       |-- *.conf
|-- conf-enabled
|-- mods-available
|       |-- *.conf
|-- mods-enabled
|-- sites-available
|       |-- *.conf
|-- sites-enabled


apache2.conf 是主要的設定檔。
conf-available/*.conf 是「可用的」config檔。
conf-enabled/*.conf 是「已啟用的」的config檔(皆為超連結)。
mods-available/*.conf 是「可用的」config檔。
mods-enabled/*.conf 是「已啟用的」的config檔(皆為超連結)。
sites-available/*.conf 是「可用的」站台設定檔。
sites-enabled/*.conf 是「已啟用的」的台設定檔(皆為超連結)。

注意!conf-enabled、mods-enabled、sites-enabled內的檔案只是連結至所對應「*-available」目錄中的設定檔,所以要設定檔案請在「*-available」目錄中設定,最後再用啟用設定檔的指令,在「*-enabled」目錄中建立連結。

二、啟用及關閉設定
1. conf啟用及關閉範例
啟用 sudo a2enconf charset
關閉 sudo a2disconf charset

2. mod啟用及關閉範例

啟用 sudo a2enmod userdir
關閉 sudo a2dismod userdir

3. site啟用及關閉範例


啟用 sudo a2ensite ssl

關閉 sudo a2dissite ssl

三、重啟Apache
1. 測試 Apache 設定檔有沒有錯誤,看到 Syntax OK, 就可以啟動apache2。
apache2ctl configtest

2. 重新啟動。
sudo service apache2 restart



2017年3月12日 星期日

Android如何正確處理 WebView SSL 錯誤處理

●官方說明:
自 2016 年 11 月 25 日起,只要新的應用程式或更新內容含有這個SSL Error Handler安全性漏洞,一律禁止在 Google Play 發佈。

如要解決這個問題,請更新應用程式的程式碼,在伺服器提供的憑證符合預期時叫用 SslErrorHandler.proceed(),不符合預期時則叫用 SslErrorHandler.cancel()。


●以往大家都在WebView的onReceivedSslError事件中直接忽略檢查,使應用程式含有SSL Error Handler安全性漏洞。
@Override
public void onReceivedSslError(WebView view, final SslErrorHandler handler, SslError error) {
    handler.proceed();
}


●現在應該要正確的處理onReceivedSslError事件,才可在 Google Play 發佈。
@Override
public void onReceivedSslError(WebView view, final SslErrorHandler handler, SslError error) {
    SslCertificate sslCertificate = error.getCertificate();

    final AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setTitle("SSL 憑證錯誤");
    builder.setMessage ("無法驗證伺服器SSL憑證。\n仍要繼續嗎?");
    builder.setPositiveButton("繼續", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            handler.proceed();
        }
    });
    builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            handler.cancel();
        }
    });

    final AlertDialog dialog = builder.create();
    dialog.show();
}

2016年9月20日 星期二

Windows Server 2012 R2、 IIS 8.5、遠端桌面,停用SSL 3.0、TLS 1.0、TLS 1.1協定、停用RC4、3DES加密套件、停用Diffie Hellman KeyExchangeAlgorithms

SSL 3.0、TLS 1.0、TLS 1.1 加密協定存在中間人攻擊弱點,RC4、3DES加密套件有漏洞、停用Diffie Hellman KeyExchangeAlgorithms,如果網站有使用HTTPS、主機有啟用遠端桌面者,強烈建議關閉。

環境:
Windows Server 2012 R2
IIS 8.5
已啟用HTTPS或主機有啟用遠端桌面

修改方式:
透過修改機碼的方式,先執行regedit.exe,並至路徑[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL]。

停用SSL 3.0
1.在Protocols目錄下新增機碼,名稱輸入「SSL 3.0」。
2.在SSL 3.0目錄下新增機碼,名稱輸入「Client」及「Server」。
3.於Client目錄中新增DWORD(32位元值),名稱輸入「DisabledByDefault」,確認值為1。
4.於Server目錄中新增DWORD(32位元值),名稱輸入「Enabled」,確認值為0。

停用TLS 1.0
1.在Protocols目錄下新增機碼,名稱輸入「TLS 1.0」。
2.在TLS 1.0目錄下新增機碼,名稱輸入「Client」及「Server」。
3.於Client目錄中新增DWORD(32位元值),名稱輸入「DisabledByDefault」,確認值為1。
4.於Server目錄中新增DWORD(32位元值),名稱輸入「Enabled」,確認值為0。

停用TLS 1.1
1.在Protocols目錄下新增機碼,名稱輸入「TLS 1.1」。
2.在TLS 1.1目錄下新增機碼,名稱輸入「Client」及「Server」。
3.於Client目錄中新增DWORD(32位元值),名稱輸入「DisabledByDefault」,確認值為1。
4.於Server目錄中新增DWORD(32位元值),名稱輸入「Enabled」,確認值為0。

停用RC4加密套件
1.在Ciphers目錄下新增機碼,名稱輸入「RC4 128/128」。
2.於RC4 128/128目錄中新增DWORD(32位元值),名稱輸入「Enabled」,確認值為0。

停用3DES加密套件
1.在Ciphers目錄下新增機碼,名稱輸入「Triple DES 168」。
2.於Triple DES 168目錄中新增DWORD(32位元值),名稱輸入「Enabled」,確認值為0。

停用 Diffie Hellman KeyExchangeAlgorithms
1.在KeyExchangeAlgorithms目錄下新增機碼,名稱輸入「Diffie-Hellman」。
2.於Diffie-Hellman目錄中新增DWORD(32位元值),名稱輸入「Enabled」,確認值為0。

2016年7月21日 星期四

CentOS禁止從遠端以root帳號登入

說明:root帳號可以從遠端登入是危險的,在管理上也會有問題,所以應該限制root帳號從遠端登入。


系統版本:CentOS 5.11

1.修改/etc/ssh/sshd_config
PermitRootLogin no (預設為yes)

2.重新啟動 sshd
/etc/init.d/sshd restart

2016年4月16日 星期六

Redmine加入Gitolite的 Git Repository

環境:
Ubuntu + Redmine + Gitolite3
Gitolite所管理的目錄為/home/git

說明:
git repository在Gitolite的管理下,預設只有git帳號才可存取,Redmine並無權限存取Gitolite控制的repository,所以需調整權限使Redmine可以存取。

Redmine是由Apache執行,所以是由www-data帳號在執行,為了使www-data帳號可存取git目錄,需將www-data帳號加入至git群組中,並修改Gitolite預設的上傳權限使git群組可存取。

步驟:
1. 將用戶www-data加入至git群組中。
sudo usermod -a -G git www-data

2. 修改Gitolite預設上傳時的權限,修改/home/git/.gitolite.rc檔案。
UMASK => 0077,
改為
UMASK => 0027,


3. 允許git群組存取repositories資料夾。(群組權限增加R、X)
sudo chmod g+rx /home/git
sudo chmod g+rx /home/git/repositories

4.如有已上傳之repository,請變更權限。(群組權限增加R、X)
sudo chmod g+rx -R /home/git/repositories/YourRepo

5.於Redmine中設定repository的位置即可。