2017.W32 - 了解你在寫的程式 - 資安
By Odelette
at 2017-08-08T23:43
at 2017-08-08T23:43
Table of Contents
2017.W32 - 了解你寫的程式
> 你不了解程式語言 直到己設計一個
## 前言 ##
#include <stdio.h>
int foo(void) {
fprintf(stdout, "Run foo\n"1m);
return 1;
}
int main(int argc, char *argv[]) {
fprintf(stdout, "%d\n", 1 < foo() > 2*foo() <= 3000);
return 0;
}
假設不管編譯器產生的任何警告 (Warning)
1- 請問上面的程式碼 (C) 是否可以編譯成功?
2- 假如可以編譯成執行檔 他的執行結果會是?
3- 假如編譯失敗 他的錯誤 (Error) 是什麼
## 內容 ##
故事的起因是看到了這篇文章[0] 講了關於 JavaScrip 中的 == 與 === 之間的神奇關係
假如曾寫過 JavaScript 就知道這語言充滿著各種可能的型態轉換 (type coercion)[1]
像是 "2" == 2 這種 會把前面的 2 轉型成 int 在做比較
因此就會有這類型的整理圖表[2] 告訴你 JavaScript 哪些情況下 == 是會成立的
但如果仔細看整理的結果就會發現 部分結果無論是 == 還是 === 都一定不為 true
像是 [] == [] 跟 [] === [] 結果都會是 false 這違反直覺的結果
而更多神奇的運算 像是 NaN + Nan 與 !NaN + NaN 就可以交給有興趣的人研究了
很多程式的安全性漏洞都來自於對於程式、函式庫或指令的不理解
在直覺上的使用造成出乎意料的結果 導致出現安全性問題
像是在 Linux 環境中 即使檔案權限設定為 root:root 600 的權限
如果父目錄的權限設定為 777 則惡意的攻擊者依然可以對檔案做'修改'
更不用提 如果是要寫封包類型的 C 程式語言 有多少人記得 struct 需要額外的敘述
[0]: https://stackoverflow.com/questions/359494/which-equals-operator-vs-should-be-used-in-javascript-comparisons
[1]: https://stackoverflow.com/questions/19915688/what-exactly-is-type-coercion-in-javascript
[2]: http://dorey.github.io/JavaScript-Equality-Table/
--
> 你不了解程式語言 直到己設計一個
## 前言 ##
#include <stdio.h>
int foo(void) {
fprintf(stdout, "Run foo\n"1m);
return 1;
}
int main(int argc, char *argv[]) {
fprintf(stdout, "%d\n", 1 < foo() > 2*foo() <= 3000);
return 0;
}
假設不管編譯器產生的任何警告 (Warning)
1- 請問上面的程式碼 (C) 是否可以編譯成功?
2- 假如可以編譯成執行檔 他的執行結果會是?
3- 假如編譯失敗 他的錯誤 (Error) 是什麼
## 內容 ##
故事的起因是看到了這篇文章[0] 講了關於 JavaScrip 中的 == 與 === 之間的神奇關係
假如曾寫過 JavaScript 就知道這語言充滿著各種可能的型態轉換 (type coercion)[1]
像是 "2" == 2 這種 會把前面的 2 轉型成 int 在做比較
因此就會有這類型的整理圖表[2] 告訴你 JavaScript 哪些情況下 == 是會成立的
但如果仔細看整理的結果就會發現 部分結果無論是 == 還是 === 都一定不為 true
像是 [] == [] 跟 [] === [] 結果都會是 false 這違反直覺的結果
而更多神奇的運算 像是 NaN + Nan 與 !NaN + NaN 就可以交給有興趣的人研究了
很多程式的安全性漏洞都來自於對於程式、函式庫或指令的不理解
在直覺上的使用造成出乎意料的結果 導致出現安全性問題
像是在 Linux 環境中 即使檔案權限設定為 root:root 600 的權限
如果父目錄的權限設定為 777 則惡意的攻擊者依然可以對檔案做'修改'
更不用提 如果是要寫封包類型的 C 程式語言 有多少人記得 struct 需要額外的敘述
[0]: https://stackoverflow.com/questions/359494/which-equals-operator-vs-should-be-used-in-javascript-comparisons
[1]: https://stackoverflow.com/questions/19915688/what-exactly-is-type-coercion-in-javascript
[2]: http://dorey.github.io/JavaScript-Equality-Table/
--
Tags:
資安
All Comments
By Frederic
at 2017-08-11T20:36
at 2017-08-11T20:36
By Lydia
at 2017-08-14T23:27
at 2017-08-14T23:27
By Isabella
at 2017-08-18T09:55
at 2017-08-18T09:55
Related Posts
使用兩台ds116 做一支cam監控&異地備分
By Skylar Davis
at 2017-08-04T10:12
at 2017-08-04T10:12
Ptt SSH 的用途是甚麼?
By Rosalind
at 2017-08-01T22:52
at 2017-08-01T22:52
2017.W31 - DEFCON
By Damian
at 2017-08-01T21:42
at 2017-08-01T21:42
2017.W30 - 實務上的密碼學應用
By Xanthe
at 2017-07-25T20:43
at 2017-07-25T20:43
防火牆可能限制UNC連線的來源IP嗎?
By Kristin
at 2017-07-22T16:31
at 2017-07-22T16:31