2020年3月21日 星期六

The problem of executing sql query in phpmyadmin. The reason is a firewall executes security policies to defense sql injection.

PHPMyAdmin error message
---
Error in processing request
Error text: error (rejected)
It seems that the connection to server has been lost. Please check your network connectivity and server status.
---
因為資料庫教學,使用xampp架設了http server&mysql server,
但學校不開放mysql的port,想說用phpmyadmin做連線
但在家中卻發現,下sql指令時卻一定產生上面的訊息
花了一段時間才找到問題,就是因為學校防火牆會把http中的sql語句擋下來
為了防止SQL Injection...(這真的是無意義又惱人的資安問題)
所以只好進行sql語句的編碼.

If the firewall uses security policies to prevent SQL Injection, it will cause this problem.

Solution:
When the front-end send a sql statement to the backend, first use base64encoder  to encode the sql statement, after the backend receives this sql statement, use base64decoder to decode the sql statement.

front-end: jQuery Base64Ecnoder  --> https://gist.github.com/TaoK/1602210
back-end: php Base64Encoder


sql.js
$(document).on('submit', '#sqlqueryform.ajax', function (event) {
add:
$form.find('textarea[name="sql_query"]').val($.base64Encode($form.find('textarea[name="sql_query"]').val()));

after
// Coming from a bookmark dialog
...
} elseif (isset($_GET['sql_query']) && isset($_GET['sql_signature'])) {
    if (Core::checkSqlQuerySignature($_GET['sql_query'], $_GET['sql_signature'])) {
        $sql_query = $_GET['sql_query'];
    }
}
to add:
if(Util::is_base64($sql_query))  //some sql_query was encoded, but some wasn't.
$sql_query=base64_decode($sql_query); //encoded sql_query must be decoded.

header.php //include javascripts file
private function _addDefaultScripts(): void
    {
add:
$this->_scripts->addFile('jQuery.base64.js');

sql.php
after:
// Coming from a bookmark dialog

if (isset($_POST['bkm_fields']['bkm_sql_query'])) {
...
}
add:
$sql_query=base64_decode($sql_query);

functions.js
 $(document).on('click', 'input#sql_query_edit_save', function () {
add:
sqlQuery=$.base64Encode(sqlQuery);

Util.php
htmlspecialchars($sql_query)-->
htmlspecialchars(base64_encode($sql_query))

Results.php
htmlspecialchars($this->__get('sql_query'))
-->
htmlspecialchars(base64_encode($this->__get('sql_query')))

'sql_query'          => $this->__get('sql_query'),
-->
'sql_query'          => base64_encode($this->__get('sql_query')),

'sql_query' => $this->__get('sql_query'),
-->
'sql_query' => base64_encode($this->__get('sql_query')),

$this->__get('sql_query'),
-->
base64_encode($this->__get('sql_query')),

tbl_row_action.php

if (isset($original_sql_query)) {
                $sql_query = $original_sql_query;
            }

-->
if (isset($original_sql_query)) {
                $sql_query = base64_decode($original_sql_query);
            }

tbl_operations.php
$this_sql_query = 'TRUNCATE TABLE '
. Util::backquote($table);
add:

$this_sql_query=base64_encode($this_sql_query);

$this_sql_query = 'DROP TABLE '
. Util::backquote($table);
add:

StructureController.php
'drop_query' => $drop_query,
modified:
'drop_query' => base64_encode($drop_query),
...
not yet finish...---
Util.php:
The below code can't be modified, because it should be able to be edited in the inline editor of the front-end.

$retval .= Url::getHiddenInputs($GLOBALS['db'], $GLOBALS['table']);
            $retval .= '<input type="hidden" name="sql_query" value="'
                . htmlspecialchars($sql_query) . '">';//Yotrew:SQL行內編輯,不編碼


// Display the SQL query and link to MySQL documentation.
...
$error_msg .= '    </p>'. "\n"
             
. '<p>' . "\n"
             
. $formatted_sql . "\n"
-->
if(is_base64($formatted_sql))
$formatted_sql=base64_decode($formatted_sql);//Yotrew:顯示SQL敍述給使用者看,所以要解碼
            $error_msg .= '    </p>' . "\n"
                . '<p>' . "\n"
                . $formatted_sql. "\n"
                . '</p>' . "\n";

add is_utf8 &s_base64 function
//Ref:https://www.itread01.com/p/1415528.html
function is_utf8($str){
$len = strlen($str);
for($i = 0; $i < $len; $i++){
$c = ord($str[$i]);
if($c > 128){
if(($c > 247)){
return false;
}elseif($c > 239){
$bytes = 4;
}elseif($c > 223){
$bytes = 3;
}elseif ($c > 191){
$bytes = 2;
}else{
return false;
}
if(($i + $bytes) > $len){
return false;
}
while($bytes > 1){
$i++;
$b = ord($str[$i]);
if($b < 128 || $b > 191){
return false;
}
$bytes--;
}
}
}
return true;
}
//判斷是否base64加密
function is_base64($str){
//這裡多了個純字母和純數字的正則判斷
if(@preg_match('/^[0-9]*$/',$str) || @preg_match('/^[a-zA-Z]*$/',$str)){
return false;
}elseif(is_utf8(base64_decode($str)) && base64_decode($str) != ''){
return true;
}
return false;
}
---

2018年9月2日 星期日

GP 125 噴射引擎

因下大雨,所以很久沒騎機車,
想說發動看看,竟然發不動,
且充電後還是發不動,但起動馬達有正常運轉,
於是在網路上找了一些方法,
因為不是專家,所以只能試最簡單的方法,
就是把油箱蓋打開,
然後打開電源,就聽到吸氣的聲音,
應該有5秒鐘以上(加油孔那麼大要吸5秒鐘也是很誇張),
想說應該就是這個問題,
等吸完氣後,蓋上油箱蓋,一發就發動。
這個問題應該是油箱內壓外接近真空,
造成加油泵無法將油打到引擎室中,
我想平常騎車騎到一半用力催油門會失去動力應該也是這個原因,
看來平時要打開油箱蓋讓油箱內外壓力平衡。

2016年7月27日 星期三

Logitech 羅技 NX80 無線滑鼠 拆解

Logitech 羅技 NX80 無線滑鼠
圖一


這顆無線滑鼠採用的微動開關不是一般滑鼠常用的微動開關,是方形的微動開關(請參考下圖四)

拆解方式:
1. NX80總共有4顆螺絲:
    2顆在最上方,把鼠貼移掉就可看到
    2顆在電池附近,打開電池蓋就可看到1顆在右方,另一顆在電池下面(如圖三)


圖二



圖三
2. 卸完螺絲後就可以輕易分離上下蓋



圖四

圖五


2016年3月12日 星期六

網頁錄音程式-使Javascript-Recorderjs

Recorderjs是一個可以用來建立網頁式的錄音程式的套件
https://github.com/mattdiamond/Recorderjs
下載下來直接解壓縮即可使用,主要用到的2個檔案是:
1. examples目錄中的example_simple_exportwav.html
2. dist目錄中的recorder.js檔

*必須注意的是它要放在web server再由Google Chrome去存取才能正確執行,如果用Google Chrome開啟是無法使用的,主要是因為Google Chrome安全性問題。
圖一、 權限要求


圖二、執行畫面


圖三、 Firefox上無法使用


使用此套件:
1. Browser要使用Google Chrome(PC或Android皆可執行,iOS不行)(Android可以錄,但無法直接播)
    *在某個網站看到也是使用此plug-in,且可以在firefox執行,因為沒有去追蹤程式碼,但我想應該只要小小修改就可以用在firefox上。
2. 此套件必須放在web server上
3. 錄音時此套件會將錄音記錄在用戶端的記憶體內,當停止錄音時,可以直接播放或匯出wav
4. 只能錄wav,所以檔案會比較大

如果要錄完音後直接上傳到web server,則搭配javascript和伺服端程式語言(如php、jsp、asp等等)即可。 

 

2014年1月4日 星期六

Patch NS2 to Support UMTS

Patch NS2 to Support UMTS(3G)
1. Download EURANE module file
    go to http://eurane.ti-wmc.nl/
    ex. ns-2.30_eurane-1.12.diff.gz
    if your ns2 version is 2.35, patch file in here(ns-2.35_eurane-1.12.diff).[1]
2. Decompress EURANE module file to ns2's home directory
3. run patch
  Change directory to ns2's home directory
  $  patch -p1 < ns-2.30_eurane-1.12.diff  <enter>
4. make or install
5. Download testscripts from http://eurane.ti-wmc.nl/
    ex.test_tcp.tcl (need idealtrace and SNRBLERMatrix.gz files)
6. run ns

ps1. If it have some problem,you modified some file by yourself.
[Makefile.in]
-CCOPT  = @V_CCOPT@
+CCOPT  = -Wall @V_CCOPT@

        apps/pbc.o \
+       umts/am.o umts/classifier-sport.o umts/demuxer.o \
+       umts/demuxerRtModule.o  umts/networkInterface.o \
+       umts/nif-classifier.o  umts/tcs.o umts/um.o \
+       umts/umtslink.o umts/umtstrace.o \
+       umts/hsdpalink.o umts/um-hs.o \
+       umts/umts-timers.o umts/virtual_umtsmac.o \
+       umts/am-hs.o \
+       umts/umts-queue.o umts/dummy_drop_tail.o \
+       umts/error_model.o tools/coot.o \

        tcl/lib/ns-qsnode.tcl \
+       tcl/lib/ns-umts.tcl \
        @V_NS_TCL_LIB_STL@

[common/packet.h]
-static packet_t       PT_NTYPE = 73; // This MUST be the LAST one
+
+// UMTS - used by hdr_cmn class for tracing purpose
+static const packet_t PT_UM = 73;
+static const packet_t PT_AMDA = 74;
+static const packet_t PT_AMPA= 75;
+static const packet_t PT_AMPBPA = 76;
+static const packet_t PT_AMBA= 77;
+static const packet_t PT_AMPBBA= 78;
+// Used for tracking HARQ transmissions (MAC-hs PDUs)
+static const packet_t PT_AMDA_H1= 79;
+static const packet_t PT_AMDA_H2= 80;
+static const packet_t PT_AMDA_H3= 81;
+       // End UMTS
+// COOT packet
+static const packet_t PT_COOT= 82;
+
+// insert new packet types here
+static packet_t       PT_NTYPE = 83; // This MUST be the LAST one

 #endif //STL
+               // UMTS
+               name_[PT_UM] = "UM";
+                name_[PT_AMDA] = "AM_Data";
+                name_[PT_AMPA] = "AM_Pos_Ack";
+                name_[PT_AMPBPA] = "AM_Piggyback_Ack";
+                name_[PT_AMBA] = "AM_Bitmap_ack";
+                name_[PT_AMPBBA] = "AM_Piggyback_Back";
+               // For HARQ transmission tracking
+               name_[PT_AMDA_H1] = "HARQ_1";
+               name_[PT_AMDA_H2] = "HARQ_2";
+               name_[PT_AMDA_H3] = "HARQ_3";
+               // End UMTS


+               // coot
+               name_[PT_COOT]="coot";
+
                // Bell Labs (PackMime OL)

2014年1月3日 星期五

NS2 traffic files generated using VANETMobiSim(on Windows)

What is VanetMobiSim?
VanetMobiSim is tool of mobility modeling.
site:http://vanet.eurecom.fr/

Install VANETMobiSim & Generate a NS2 traffic files

1. Download VanetMobiSim sources and VanetMobiSim binaries
go to http://vanet.eurecom.fr/
download VanetMobiSim sources file
  (ex. VanetMobiSim 1.1 sources file and VanetMobiSim 1.1 binaries)

2. Downlaod CanuMobiSim
go to  http://canu.informatik.uni-stuttgart.de/mobisim/downloads/
download CanuMobiSim(ex. CanuMobiSim v1.3.4)

3 Download Apache Ant
go to http://ant.apache.org/bindownload.cgi
downloasd Apache Ant (ex. apache-ant-1.9.3-bin.zip )

4. Decompress apache-ant-x.zip to a folder
  ex. E:\VanetMobSim\ant

5. Set system variable
 (1) Add a variable "ant_home"




 (2) Add "%ant_home%\bin" to "PATH" variable



6. Decompress VanetMobiSim sources to a folder
    ex. E:\VanetMobSim\VanetMobiSim-1.1

7. Decompress CanuMobiSim, then copy "src" folder in CanuMobiSim_1_3_4_src to VanetMobiSim sources  folder
    ex. E:\VanetMobSim\CanuMobiSim_1_3_4_src
    copy E:\VanetMobSim\CanuMobiSim_1_3_4_src\src to E:\VanetMobSim\VanetMobiSim-1.1


8. open "Command Prompt" window(cmd.exe)
    (1) cd E:\VanetMobSim\VanetMobiSim-1.1
    (2) "ant patch" <enter>
9. copy VanetMobiSim binaries to sample folder in VanetMobiSim sources  folder
  copy VanetMobiSim-1.1.jar ex. E:\VanetMobSim\VanetMobiSim-1.1\samples

10. run java -jar VanetMobiSim-1.1.jar xmlfile.xml
  ex. java -jar VanetMobiSim-1.1.jar IDM_LC.xml

11. Generate NS2 traffic
  (1) modify configuration in "IDM_LC.xml"
    <!-- <extension class="de.uni_stuttgart.informatik.canu.mobisim.extensions.NSOutput" output="ns_trace.txt"/>-->
    remove <!-- ... --> ,as above
   

 (2) re-run java -jar VanetMobiSim-1.1.jar IDM_LC.xml
 (3) the ns_trace.txt is generated in the folder which is a NS2 NS2 traffic