行李箱在託運前,錄下行李箱的外觀為證據

 許多人出國旅遊常會保旅遊不便險,確保如果旅途中行李遺失或毀損時可以獲得理賠。一位美國網友分享了一個小祕訣,只要多做一個簡單的動作,就能確保你的行李在遇到意外時,能得到妥善的處理。


據《每日郵報》報導,美國拉斯維加斯一名護士泰勒(Robin Taylor)是一位旅遊達人,常常在TikTok上分享她的環球旅行心得,受到許多網友的喜愛。近日她分享一段影片,教大家如何確保行李如果遭遇意外,可以獲得保障。


影片中可見她用手機拍攝自己的軍綠色行李箱的全貌,一邊拿手機拍攝,一邊旋轉自己的行李箱,根據泰勒解釋,每次要託運行李前,她都會用錄下行李箱的外觀為證據,這個小動作已經成功保護了她的權益2次。


泰勒表示如果你的行李在託運的過程中被弄壞或是弄丟,就可以用這段影片作為證明,直接向航空公司提出賠償,因為影片可以證明你的行李箱在託運前是完好無缺的。


泰勒的小祕訣也獲得其他網友支持,「作為一名曾經在行李失物招領處工作的人,我建議真的要這麼做,這對我們有很大的幫助」,也有販售行李箱的業者現身認同,「我也經常會提醒顧客要拍照或錄下自己的行李箱,當作證據」。


另外則有人分享了自己不幸的經歷,有人曾因為行李被摔壞,因為沒有證據而無法求償,也有旅客是因為行李遭竊,向保險公司申請理賠時,對方請他提供照片,從那次經驗後讓他學會每次都幫行李拍照。


除此之外,旅遊保險專家達夫(Angela Dove)認為,在出發前給行李拍照是很明智的舉措,幫你的行李失竊或遺失時,可以幫助相關單位辨識你的行李,或者在行李箱被損壞時,便於藉此證據向航空公司或保險公司索賠。

「安全住飯店」撇步

 1) 民眾可以把水瓶往床底下丟,若水瓶自然從另一邊滾出來,則意味沒有人躲在床底,因不需要趴下或近距離查看,所以在發生任何問題時,也能立即反應,讓自己逃離危險空間。

2) 把一隻鞋子放進保險櫃裡,這樣就能保證自己在離開房間之前,不忘把貴重物品都帶走。

3) 使用手機的「手電筒功能」來檢查 隱藏攝影機,包括窗簾、電視、抽屜、警報器以及廁所等,只要有奇怪的反光,應立刻向飯店反應。

在美國開公司的大小事

頁庫存檔,以免來源網址失效之類的

https://sheracaolity.ghost.io/incorporation/


雖然我今年年初就開始全職創業了,但是直到九月才正式成立公司。原本以為開公司是一件非常容易的事情,沒想到所有程序跑完花了整整一個月的時間。第一次跑這些程序時多多少少還是有些緊張、擔心犯下低級錯誤,網路上也查不到跟我狀況類似的案例。所以今天我想分享一些在美國開公司需要考慮和注意的細節,讓其他想走國際市場的台灣創業者有第一手的經驗可以參考。

開公司的時機

我認為創業者在二種情況下必需把公司開起來。第一種情況是要開始跟大量用戶收費時;第二種情況是要準備跟投資人籌資時。原因很簡單:用戶買的是你的公司的產品,如果你沒有公司,你就沒辦法做生意。即便用戶願意直接付費給你,這也會對你造成責任上的風險,因為你並沒有將「你」和「你創辦的公司」做出法律上的區隔。同樣的,投資人投資的是你的公司的未來,如果你沒有公司,投資人會叫你先開一間再說。

但是反過來看,如果你現在連能收費的產品都沒有,也暫時沒有籌資的打算,我個人是不推薦開公司的。開公司需要花錢、花時間,公司開好後隨之而來的是一些定期開銷,像是會計服務、報稅等等,這些都不是創業者在創業初期需要關心的事情。在創業初期,最重要的還是把產品做出來,與用戶對話、迭代產品、驗證假設。其他會讓你分心、消耗資源的事情,能避就盡量避開。

公司應該開在哪裡

當你決定要開公司了,下一個問題就是「公司要開在哪?」我認為只要你做的是以成長為目標的科技公司(特別是軟體公司),想跟美國的投資人籌資,或是你想服務歐美和國際市場、做全世界的生意,就在美國 Delaware 開設 C Corp,因為大部分的美國 VC 都只會投資 Delaware C Corp,Delaware C Corp 在世界做生意也非常方便、有很好的 credibility。

為什麼會想跟美國的投資人籌資呢?因為美國是世界資金和資源的聚集地,擁有全世界最健全的創業生態系,覆蓋了天使投資、加速器、Seed、A、B、C 輪等不同階段的投資機構,以及一家公司在不同階段所需要的服務和人才網絡。好的投資人不只會給你錢,還可以把你介紹給好的下一輪,引入更多的資源幫助公司成長。

除了生態系之外,對創業者友善的制度也是一大考量。美國公司做早期籌資可以使用像 Safe 這種簡單無風險的公版投資合約,創業者只要和投資人共同決定投資額度和 Valuation Cap 這兩個數字,一天就能搞定投資。如果你開的是台灣公司,可能要花好幾個月跟投資人討論投資條款,還得找律師幫忙看合約,這些時間和成本大可以用來打磨產品。

其他的好處還有很多,比方說 Delaware C Corp 可以在世界各地營業,搭配像 Stripe 這樣的支付服務向世界各地的用戶收費;很多事務都可以使用電子化服務,不需要搞一堆實體會議和紙本紀錄。透過 Deel 這樣的遠端招聘服務,你還可以從美國公司發薪水給自己,不需要在創業初期就花時間去開什麼台灣子公司。

在美國設立公司

一旦你決定在開 Delaware C Corp 了,下一個問題就是「怎麼開?」。對於大部分的外國創業者,最方便且最不容易出錯的方式就是使用 Stripe Atlas 或是 Clerky 提供的線上標準化服務。我們當初選用的是 Stripe Atlas,前後加起來只要花 500 美金。這些服務都有提供很完整的 post-incorporation 文件以很有效率的客服,確保創業者不只有把公司開好,也有確實的完成開公司後需要完成的重要事項,像是申請 EIN、購買股份、送繳重要文件等等。如果遇到法律上的問題,還可以使用像 Lawbite 這種便宜的法律諮詢服務。

Stripe Atlas 會透過 email 寄給你開 Delaware C Corp 相關的法務文件,包含 Certificate of Incorporation、Board Approval、SS-4 和 Form 8821。把這些文件全都線上簽一簽後,等個兩三天就會收到公司開好的通知了。

在 Delaware 成立 C Corp 後仍然有不少事情得完成,這些事情雖然麻煩但是大部分都很重要。接下來我會一一介紹台灣創業者在做這些事情時需要注意的細節。

等待 EIN

開一家公司,意味著你建立了一個「法人」,並將公司這個「法人」與你這個「自然人」正式區隔開來。正如同每個自然人都有自己的身份證號碼一樣,每個法人(公司)也都會有它獨一無二的號碼,稱作 EIN(Employer Identification Number),類似於台灣的統編。

在公司開好後,Stripe Atlas 會替你跟 IRS(美國國稅局)申請公司的 EIN。在大多數情況,你會在兩週內收到 EIN。但是也有少數例外,例如疫情爆發期間有一陣子 IRS 關閉了,不少創業者等了快兩個月才收到 EIN。我們因為開公司時美國疫情已經趨緩了,所以在公司成立後一週就收到 EIN 了。

在美國,你必須要有 EIN 才能替公司在銀行開戶。未來不管是客戶付費買你服務,還是投資人要投資,又或是你的公司要聘 Employee 或 Contractor,錢都會從公司的銀行戶頭進進出出。每年到了報稅季時,你也需要有 EIN 才能替公司報稅。

發行股份

在公司開好、等待 EIN 的同時,就應該同時處理發行股份的相關事宜了。Stripe Atlas 在公司成立的九十天內會提供一個 founder stock tool 幫助你做這件事。

一家公司在剛成立的時候,股份並不屬於任何人。你和你的共同創辦人要獲得股份,就必須用你們的智慧財產(Intellectual Property)以及一小部分金額來購買這些股份(purchase shares);在購買股份前,公司負責人(通常是 CEO)必須先替公司發行股份(issue shares);在發行股份前,則必須先授權股份(authorize shares)。

我在開公司時,Stripe Atlas 給的官方配置是授權 1000 萬股,發行其中的 800 萬股讓共同創辦人購買,預留 200 萬股等到未來招聘員工時再發行。發行股份的流程大致是這樣跑的:公司負責人會先簽 Founder Stock Board Consent,裡頭包含要配給每個共同創辦人的股份數。假設公司發行了 800 萬股,三個共同創辦人打算用 34%、33%、33% 的比例去分股權,三個人就會分別被配給 272 萬、264 萬、264 萬的股份。此時這些股份的價格非常低,272 萬股份只需要花 27.2 美元。

公司負責人簽完 Founder Stock Board Consent 後,Stripe Atlas 會生成 CSPA 和 CIIAA 這兩份文件給每一位共同創辦人簽名,將他們為公司所建立的智慧財產轉讓給公司,這包含了所有為公司寫的程式碼、設計稿等等。CSPA 和 CIIAA 簽好後,接下來就是等公司拿到 EIN、銀行開戶後,共同創辦人們必須將 CSPA 上標示的金額(例:27.2 美元)轉帳到公司戶頭,才算是完成股份的購買。

銀行開戶

在銀行還沒開戶前,創業者是無法向公司購買股份的。也因此當你拿到 EIN 後,下一件該做的事情就是替公司開戶。Stripe Atlas 有推薦一些適合新創公司的銀行,包含 SVB 和 Mercury Bank 等等。我們公司當時選擇的是 Mercury Bank。

在 Mercury Bank 替新創公司開戶通常需要花一個禮拜審核,每個共同創辦人都會需要提供護照影本。如果你或你的共同創辦人的護照過期了,請儘早到外交部領事局換照。我們當初有一位夥伴護照過期,剛好又遇到中秋連假、領事局沒開,花了 12 天才換完護照。再加上開戶審核等了 5 天,從拿到 EIN 開始算,一共花了 17 天才成功開戶。

購買股份

公司成功在銀行開戶後,共同創辦人們就要開始匯款購買股份了。這裏有幾個細節需要特別注意。

首先,如果要從台灣的個人戶頭透過 International Wire 轉賬到美國的公司戶頭購買股份,請一定要在轉帳單上填寫附言,也就是數字是 70 的那個欄位。Mercury Bank 提供的附言叫 Remittance Information,但是在台灣的銀行,附言很常被寫做 Instructions。你的銀行行員很可能會以為這兩個是不同的東西而漏打這份資訊,導致錢轉不過去。

第二,根據我們的經驗,轉帳的時候收費明細(Details of Charges, 71A)選擇 SHA 一定會轉帳成功(匯出行費用由申請人支付,中間轉匯行及受款行費用由受款人支付),選擇 OUR 的話則不一定(所有匯出行、中間轉匯行及受款行費用均由申請人支付),要看你用哪家銀行。我們當時曾擔心選擇 SHA 會導致匯入的金額跟實際到款的金額不符,但實測的結果是用 SHA 跨國轉帳到 Mercury Bank 的錢全部都有入帳,分毫不差。這可能是因為 Mercury Bank 免手續費的緣故。

第三,購買股份並不代表擁有股份。Founder Stock Board Consent 裡有寫清楚股份的 Vesting Schedule,基本上大家都是 4-year vesting、1-year cliff,代表你要在公司工作一年後才能拿到你購買的股份的 1/4,接下來的每個月可以拿到 1/48,直到你在公司待滿四年後才會完全獲得購買的所有股份。這算是矽谷公司的標準合約,主要用途是避免共同創辦人在公司創立的前幾年帶著大量股份離職、對公司造成龐大傷害。

創業者不可不知的 83(b)

從匯款購買股份當天開始算的三十天內,每個共同創辦人都必須要列印、親筆簽署一個名叫 83(b) 的文件並郵寄給 IRS。這是我認為創立公司的過程中最麻煩的一道程序,但它也是開公司的過程中最不能出錯的一道程序。我們當初的作法是每個人簽兩份 83(b) 以及一封信,放到同一個信封袋中透過台北的 DHL 寄給 IRS,同時預付回函的郵資,這代表 IRS 未來要將其中一份 83(b) 蓋章寄回來給我們保存。83(b) 寄出前建議拍照存證,同時務必要保留寄送的發票,這些未來不管是報稅或是籌資時做 Due Diligence 都可能會被要求提供。

在購買股份後三十天內寄 83(b) 給 IRS,目的就是跟 IRS 宣告你要以公司當前的估值把這些你購買但尚未獲得的股份的稅提前繳清(等同不用繳)。如果你沒有在時限內寄 83(b),那隨著你接下來四年逐年獲得股份,你就必須根據獲得股份當下的股份價值去繳稅。要是你公司的估值變高(例:一千萬美元),你獲得的這些股份價值就會變得超高(百萬美元),你就必須為這些股份繳非常多的稅。然而,你的股份在上市或是被收購前是無法賣出的,這意味著你根本不可能有這麼多現金流去繳這些稅。

所以再強調一次:一定要在匯款後三十天內寄出 83(b)!DHL 的郵資很貴(每個人要好幾千塊),但是跟沒寄 83(b) 可能帶來的損失相比完全不值一提。

會計、簿記

在設立好公司、拿到 EIN、銀行開好戶、完成股份購買、寄出 83(b) 後,最後一件需要做的事情,就是找個美國的會計師幫你做帳和報稅。如果你有投資人,就請投資人介紹認識的會計師給你。我們每個月簿記會花 350 美元,然後年度報稅會花 2000 美元,換句話說一年在會計、簿記總共會花 6200 美元,這算是經營一家美國公司的必要支出。

總結

以上就是在 2021 年,台灣創業者要在美國開公司需要注意的細節。希望這篇文章對想走國際市場的台灣創業者有所幫助。

土增稅重購退稅 & 房屋保固

姑且不論屋主抱持著什麼心態選擇售後回租,臉書粉絲專頁《賣厝阿明 知識+》曾提醒當買家這種狀況時,有兩點需要特別注意,第一點為可能無法申請土增稅重購退稅,因根據現行法規,申請土地增值稅重購退稅的條件之一,就是出售前1年內不能有,營業使用或出租;第二點則是房屋保固,因為「漏水保固」是在交屋日起算6個月內,如果售後回租可能會遇到買方還沒點交確認完內部狀況,保固時間就到期的情形。


時空背景:2022 年春天開始,美國通膨飆升超過 8 %,FED 開始升息縮表以降低通膨

這次的通膨回顧 197x 年代的經驗,FED 必須堅持長期高利率才能解決極度惡化的通膨現象

引發超級通膨的原因是在此之前爆發武漢肺炎,全球經濟活動停擺,FED 實施無限 QE,引發台股停漲在接近 2 萬點的超級泡沫化等現象。

197x 年代,美元利息最高達到 20% 以上,美元兌台幣升至 40 元以上。


房市翻轉搶賣高點?他曝兩大怪現象

近來房市降溫的訊號頻頻出現,在央行升息、政府打炒房政策的雙重影響下,不少屋主都想趁著這段時間趕緊將手中的房子轉手,不過卻有人在看房的過程中,發現了不少怪現象。

 一名網友在PTT上發文,表示自己近來頻繁看房,發現許多屋主把房子拿出來賣,但是價格卻相當的硬,每個人都想要賣出社區最高價,不過卻又要求出售後回租一年到半年,或是要讓租客租到半年後,讓他相當不能理解為何要現在拿出來賣。


除了屋主外,遇到的房仲也讓他傻眼,因為每個房仲都替屋主保衛價格,要他去看其他比較便宜的物件,或者是不同品牌的房仲都宣稱對方的房子已經賣掉,但事實上都沒有賣掉,讓他大嘆「只是想買個房,搞得好複雜又好累」。

 底下有網友留言表示贊同,寫到「跟你感覺差不多,被搞到整個懶得看,全部改拿去丟美元定存了」、「賣不掉才會做一堆小動作保衛價格」、「近期也很有感覺,看房看到心累!想要找個滿意的手頭又太緊…」。

 至於為何那麼多屋主選擇售後回租,也有不少網友給出了合理的解釋,分析「感覺要跌了,先賣再跟你回租,等跌了一年再問你要不要賣回來」、「最近一堆想賣再最高點,賭一年後房價崩,再拿現金買低」、「就是放空自己的房子,賣在最高點」。

姑且不論屋主抱持著什麼心態選擇售後回租,臉書粉絲專頁《賣厝阿明 知識+》曾提醒當買家這種狀況時,有兩點需要特別注意,第一點為可能無法申請土增稅重購退稅,因根據現行法規,申請土地增值稅重購退稅的條件之一,就是出售前1年內不能有,營業使用或出租;第二點則是房屋保固,因為「漏水保固」是在交屋日起算6個月內,如果售後回租可能會遇到買方還沒點交確認完內部狀況,保固時間就到期的情形。

Case Study: 新型態的兒童看護新創

* https://withotter.com/

Otter Childcare

Keywords: Trust & safety.

- July 2021 We announced our Series A led by Sequoia.

- Parents who need childcare pay another parent to care for their child.

- We’ve helped more than 3,500 parents provide care and earn more than $20 million dollars collectively.

And in August 2022, we began welcoming caregivers of all backgrounds to the platform, including but no longer exclusively, stay-at-home parents.

- How it works: https://withotter.com/careseeker



* https://www.abule.io/

Keywords: machine learning, blockchain, CARE$ token, DAO,  Community, Trust & safety.

They have a strong belief based on their culture. 

https://www.abule.io/our-roots

Abulé is more than just about bartering childcare and school pick-ups. It’s about building a network of relationships based on mutual trust and respect. We’re on a mission to not only help with the physical needs of caregiving, but also the mental and emotional support that parents don’t always have. Abulé is designed to provide a holistic approach to care management — for childcare, eldercare and household care. We aim to lean on each other rather than a system, schedule or routine. These may fail, but a strong community never will. Let’s go back to the culture of togetherness we once knew and loved. Together, we will thrive.

“Regardless of a child’s biological parents, their upbringing belongs to the community.” 

常用的工具軟體




Thunder Video Converter 

閃電視頻轉換器是支持 macOS 平台的一款視頻格式轉換工具,於 Apple App Store 上有免費版。




IINA 是一款基于 mpv 的自由及开源媒体播放器,以 GNU 通用公共许可证版本3(GPLv3)发布,用Swift编写,仅支持 macOS 平台。

https://iina.io




LibreOffice

https://www.libreoffice.org




Sublime Text 是一套跨平台的文字編輯器

https://www.sublimetext.com/





ExFAT 在 Win 與 macOS 交替使用容易損毀

如果要在 macOS 和 Windows 之間交替使用外接硬碟時,一定要在 macOS 上將硬碟格式化,因為 macOS 並未支援所有的 Windows 配置單位大小,而會導致無法掛接硬碟

如何在 macOS 格式化 ExFAT:https://www.seagate.com/tw/zh/support/kb/how-to-format-your-drive-exfat-on-macos-1011-el-capitan-and-higher/


然而,根據網友的使用經驗,ExFAT 在 Win 與 macOS 交替使用容易損毀

https://www.mobile01.com/topicdetail.php?f=481&t=2844693

災情詳如網友討論,

簡言之,兩個 OS 都試圖要管理同一顆硬碟的 partitions,容易出問題。

最好還是由其中一方 OS 來管理這顆硬碟 (專用於那一方的檔案系統),然後另一方安裝當三方軟體來存取。


1. 在 Windows 中安裝 MacDrvie (付費軟體)

2. 在 macOS 中安裝 MacFUSE (免費軟體)、NFTS-3G (免費軟體)、或 Paragon NTFS for Mac (付費軟體)




APFS 是設計給 SSD 使用的,HFS+ 只支援到 2040年

https://masasaboy.blogspot.com/2018/09/High-Sierra-without-APFS.html

隨著macOS Mojave的釋出,Apple也停止了對El Capitan的維護,因此我也在最近將系統更新到了High Sierra(我跳過了Sierra,主要原因是Sierra不支援外接螢幕HiDPi)。

屏除你在官方介紹就能看到的東西以外,High Sierra有幾個非常值得提出來的優點。第一是安裝完就會立刻發現的是作業系統佔的容量比El Capitan小了很多,對於當時買MacBook時選了比較小容量機型的人應該是一大福音;另外整體的速度也比El Capitan快... 當然也有可能是因為硬碟容量清出來了所以比較快啦。

第二個優點非常重要,那就是High Sierra原生支援NVMe (Non-Volatile Memory Express) SSD。假如你的MacBook是2015年(包括)以前的機型,其實主機板上的PCIe SSD是可以更換的。然而PCIe SSD規格非常混亂,加上Apple自己又喜歡搞特規,所以以往MacBook即使可以更換SSD,你也只能買特殊規格的SSD來換,像是OWC,或是臺灣就是找創見。當時能夠更換的稱為AHCI (Advanced Host Controller Interface) SSD ,這種SSD非常昂貴,而且你能找到的AHCI SSD通常速度跟品質都不如Apple原廠的(Apple原廠的AHCI SSD一般為SanDisk或Samsung),使得當時自己更換MacBook內的SSD非常不划算。

相較於AHCI,NVMe SSD就便宜許多了,當然價格還是不可能跟SATA SSD相比啦,但NVMe SSD有著超越AHCI的超高速度,如果機器完整支援PCIe 3.0的4條通道,讀寫速度可以到3000MB/sec這麼爽快的速度啊!而且也有廠商做出了轉接頭,所以想買個可以負擔的SSD替換MacBook的內建硬碟再也不是夢想啦!

不過因為我還沒有時間處理轉移的問題,而且雖然硬碟空間是有點拮据,但也還夠用,因此暫時沒有要對更換SSD一事做更多的著墨,但就先提供一個可能性,附上一些連結讓有需要的人可以自己嘗試看看。一如以往,話先說在前頭:Use at your own risk.

HOW TO: MACBOOK PRO RETINA M.2 SSD STORAGE REPLACEMENT AND UPGRADE
Do MacBooks support NVMe SSD drives via the use of a Sintech adapter?


除了原生支援NVMe以外,High Sierra還有一件重要的更新,那就是APFS (Apple File System)。當你從任何舊版的macOS升級成High Sierra時,假如你機器的硬碟是SSD,那麼升級的過程將會自動將檔案系統從過往的HFS+ (Mac OS Extended) 升級為APFS,傳統硬碟以及混合硬碟則不會自動升級,因為APFS就是設計給SSD使用的。

HFS+終將走向終點,因為當時設計時有個限制,那就是檔案日期只支援到2040年的二月6號。然而,APFS現階段看來也還是有各種缺點,尤其根據一份非常詳盡的測試,其效能並不如官方宣稱比HFS+來得高。雖然像是搬檔案這種動作在APFS中會瞬間完成,因為只是換個檔案的位址,不再是像以往把整個檔案從區塊A寫到區塊B,但你總不會永遠只有在搬檔案吧?

另外,由於過往的macOS使用的檔案系統都是HFS+,這同時也造成一個問題,那就是當你升級成High Sierra之後,會發現過去用Time machine備份的檔案全都不能用了!更尷尬的是,High Sierra並沒有辦法直接安裝在APFS格式的SSD上 (What?),所以如果得重灌,使用者得利用Recovery先重灌機器自帶的作業系統版本,然後才能升級上High Sierra。(來源)

總之,各種我得到的資訊都讓我認為先停在HFS+是比較好的做法,畢竟Apple的產品照過往的經驗,通常第一代還是別碰的好。幸好,High Sierra確實可以在安裝的時候避開將檔案系統升級成APFS(畢竟如果是傳統硬碟跟混合硬碟的機型本來就不會轉換了嘛),但就得下點指令了。

我主要是參考這篇的做法來進行。在你下載完High Sierra的完整安裝檔之後,對安裝檔 (.app檔) 點右鍵選擇 "Show Package Contents" ,照著網站的指示在Resources資料夾中找到startosinstall這個檔案。接著打開Terminal,最簡單的作法就是把剛才那個startosinstall從Finder直接拖進Terminal,接一格空格,然後給上參數 --converttoapfs NO ,按下Enter整個安裝過程就會開始進行了。完整的指令會像是:

/Applications/Install\ macOS\ High\ Sierra.app/Contents/Resources/startosinstall --converttoapfs NO

注意,我參考的那個網站真的很落漆,不但在指令那行把兩個減號(-)變成一個連字號(–),converttoapfs還忘記加s(但在Terminal的截圖中卻是正確的...),使用的時候要注意一下。不過你打錯它也不會讓你跑就是了啦。

我目前在升級成High Sierra使用的過程中幾乎沒有遇到任何相容性問題,整體來說我還蠻滿意的,祝大家也能在升級後使用愉快。



網站開發的前端技術變化

 



2021/10/9 整理

現在前端已經進入了 MVVM 時代,但 jQuery 並不會退出歷史舞台,即使沒人用 XP、Win7 操作系統,即使所有人都用 Chrome 也不會。jQuery 手工操作已經存在的 DOM,操作比較精細,性能好但開發效率低,瀏覽器兼容較好,各個門戶主要還是用 jQuery。


MVVM 解決的是開發效率問題,構建複雜表單比較順手,大大降低了手工操作 DOM 的代碼量,適合內部應用,管理後台,但 MVVM 不是萬能的,缺點是

1. 要實現 DATA 變化的雙向綁定,一般瀏覽器兼容差

2. DOM 動態生成無法 SEO,搜索引擎搜不到

3. 通過數據操作 DOM 實質上不夠精細,有一點性能上的損耗


jQuery 解決的是遠古時代的瀏覽器兼容問題,將 DOM 操作做了一層兼容性封裝,但其用法本質上與直接使用原生 JS 接口沒有什麼不同。

1. 原生操作 DOM 不可能消失,雖然已經有了 document.querySelectorAll(selector),但有沒有覺得還是 $(selector) 更方便?雖然有了 element.addEventListener(event, handler) 但 $(select).on(event, handler) 是不是更簡潔?

2. jQuery 有一個強大的前端生態

畢竟流行了十幾年,目前很多複雜前端組件、框架都基於 jQuery,比如說編輯器,日期選擇器,自動提示等,你可以用 MVVM 來重寫,但動態渲染 DOM 與穩定性 DOM 有先天的性能差距,越複雜的控件,MVVM 的性能損失越明顯。

而且基於 jQuery 相當於基於原生 JavaScript,jQuery 可以視為原生 API 的一層封裝,以後沒有瀏覽器兼容問題了,自己實現一個 jQuery 適配器即可,比如 zepto,所有基於 jQuery 的組件可以直接用。







JavaScript 和 jQuery 混用

JavaScript window.onload 和 jQuery $(document).ready() 的差異

在撰寫頁面的 JavaScript 或 jQuery 時,通常會利用 window.onload 事件或 $(document).ready() 事件來確保 DOM 完全載入,不過兩者仍有以下差異。


window.onload 會等網頁的全部內容,包括圖片,CSS及 <iframe> 等外部內容都載入後才會觸發,但 $(document).ready() 在 Document Object Model (DOM) 載入後就會觸發,所以順序上$(document).ready() 會比 window.onload 先執行。


window.onload 是 JavaScript 的原生事件,而 $(document).ready() 是 jQuery 的事件(其實是透過監聽 JavaScript 的 DOMContentLoaded 事件來實現)。


window.onload 的用法如下:

window.onload = function() {

  // console.log("window loaded")

};


$(document).ready() 的用法如下:

$(document).ready(function() {

  console.log("document ready");

});

// 也可簡寫成

$(function() {

  console.log("document ready");

});



jQuery 轉為 JavaScript: var jsObject=$("#id").get(0);

JavaScript 轉為 jQuery: var $object=$(document.getElementById("id"));



JavaScript 呼叫 jQuery 方法:

function getResult(){

    $().getFuc();

};

$(function(){

    $.fn.getFuc=function(){

        alert("1111111111111");

    }

});


 jQuery 呼叫 JavaScript 方法:

$("#button3").click(function () {

        getFuc();

    });

function getFuc(){

       alert("111111");

}



在 HTML 中使用 onclick 方法與 jQuery 的事件監聽有何差異 (JS 亦能實現) ?

onclick 通常是在滿足以下條件時才優先於 .click 的方法:

1. 只有一個事件要為 click 事件註冊
2. 擔心移動性能/電池壽命

jQuery 以犧牲性能為代價來綁定所有事件。

如果我們談論性能,在任何情況下直接使用總是更快。


但倡導事件監聽的理由是 JavaScript 和 佈局(HTML) 應該分開
提倡者認為任何這些事件創建 evenHandler 是更好,一個事件可以捕獲多個項目,而不是為每個事件創建單獨的腳本



防禦利用 iframe 的站點劫持攻擊

https://paper.seebug.org/papers/Archive/drops2/Clickjacking%E7%AE%80%E5%8D%95%E4%BB%8B%E7%BB%8D.html



各種防禦與破解的方法整理


推荐的防御方法:


一、X-FRAME-OPTIONS

X-FRAME-OPTIONS是微软提出的一个http头,专门用来防御利用iframe嵌套的点击劫持攻击。

并且在IE8、Firefox3.6、Chrome4以上的版本均能很好的支持。

这个头有三个值:

DENY               // 拒绝任何域加载

SAMEORIGIN         // 允许同源域下加载

ALLOW-FROM         // 可以定义允许frame加载的页面地址

php中设置示例:

header ( "X-FRAME-OPTIONS:DENY");

二、目前最好的 JavaScript 的防御方案为:

<head>
<style> body { display : none;} </style>
</head>
<body>
<script>
if (self == top) {
    var theBody = document.getElementsByTagName('body')[0];
    theBody.style.display = "block";
} else {
    top.location = self.location;
}
</script>




0x00 相关背景介绍

Clickjacking(点击劫持)是由互联网安全专家罗伯特·汉森和耶利米·格劳斯曼在2008年首创的。

是一种视觉欺骗手段,在web端就是iframe嵌套一个透明不可见的页面,让用户在不知情的情况下,点击攻击者想要欺骗用户点击的位置。

由于点击劫持的出现,便出现了反frame嵌套的方式,因为点击劫持需要iframe嵌套页面来攻击。

下面代码是最常见的防止frame嵌套的例子:

if(top.location!=location)
    top.location=self.location;

事实上,这种代码很容易被绕过,在后文中讨论。

0x01 防御的几种方式

防止frame嵌套的js使用代码由高到低比例:

if (top != self)
if (top.location != self.location)
if (top.location != location)
if (parent.frames.length > 0)
if (window != top)
if (window.top !== window.self)
if (window.self != window.top)
if (parent && parent != window)
if (parent && parent.frames && parent.frames.length>0)
if((self.parent&&!(self.parent===self))&&(self.parent.frames.length!=0))

检测到后的处理方案:

top.location = self.location
top.location.href = document.location.href
top.location.href = self.location.href
top.location.replace(self.location)
top.location.href = window.location.href
top.location.replace(document.location)
top.location.href = window.location.href
top.location.href = "URL"
document.write('')
top.location = location
top.location.replace(document.location)
top.location.replace('URL')
top.location.href = document.location
top.location.replace(window.location.href)
top.location.href = location.href
self.parent.location = document.location
parent.location.href = self.document.location
top.location.href = self.location
top.location = window.location
top.location.replace(window.location.pathname)
window.top.location = window.self.location
setTimeout(function(){document.body.innerHTML='';},1);
window.self.onload = function(evt){document.body.innerHTML='';}
var url = window.location.href; top.location.replace(url)

0x02 绕过的几种方式

对于使用parent.location来防御的可以使用多层嵌套的方式绕过。

一、例如防御代码为:

if(top.location!=self.location){
     parent.location = self.location;
}

建立两个页面:

1.html代码为:

<iframe src="2.html">

2.html代码为:

<iframe src="http://www.victim.com">

访问1.html之后可以看到页面并无跳转等动作。

http://static.wooyun.org/20141017/2014101711515250154.png

二、onBeforeUnload函数的利用:

onBeforeUnload的介绍以及各种浏览器的支持情况请见:

http://w3help.org/zh-cn/causes/BX2047

如下的防御代码:

if(top != self) top.location.replace(location);

新建立页面,代码如下:

<script>
var framekiller = true;
window.onbeforeunload = function() { if(framekiller) { return
"Write something here to keep people stay!";} };
</script>
<iframe src="http://www.victim.com/">

打开页面显示如下:

http://static.wooyun.org/20141017/2014101711515274922.png

欺骗用户点击留在此页后显示:

http://static.wooyun.org/20141017/2014101711515228109.png

三、XSS filter的利用

IE8以上以及Chrome浏览器都有XSS筛选器,这些可以用来对付防御frame嵌套的代码。

防御代码如下:

if(top!=self){
    top.location=self.location;
}

新建立页面,代码如下:

<iframe src="http://www.victim.com/?<script>">

访问后页面显示:

http://static.wooyun.org/20141017/2014101711515211018.png

IE的xss筛选器自动拦截了跳转。

斯坦福的文章里写了Chrome也会出现这种情况,并给出了攻击代码:

<iframe src=http://www.victim.com/?v=if(top+!%3D+self)+%7B+top.location%3Dself.location%3B+%7D">

但是测试发现,新版的Chrome并不会拦截了,会直接跳转过去。

如果跟的参数中有变量在页面中显示的,会把变量过滤一遍再输出,但不会阻止跳转。

四、Referer检查的问题

有一些站点允许自己的域名嵌套自己,禁止外站对自己的嵌套。

通常是用document.referer来检测来源是否为自己的域名。

if(top.location!=location){
    if(document.referrer && document.referrer.indexOf("aaa.com")==1)
    {
        top.location.replace(document.location.href);
    }
}

判断字符串中是否含有本域名是常见的错误用法,利用二级域名的方式便可绕过,如:

http://aaa.com.bbb.com

注:从https域下post数据到http域的时候,浏览器不带Referer。

IE有个属性可以设置security为restricted可以禁止iframe里执行js脚本,但是要达到点击劫持的效果,必须要能够执行js所以很鸡肋。

代码如下:

<iframe src="http://www.victim.com/iframe.html" security="restricted"></iframe>

重点是手机站点,很多主站做的很不错,但是手机站点没有做任何防护,很容易造成点击劫持。

五、location劫持

在IE浏览器中,如果能够在防御代码的前面可以插入form表单的话,可以利用form表单对location进行劫持。

<form name=self location="javascript:alert(1)"></form>
<script>
if(top!=self){
   top.location=self.location
}
</script>

用iframe嵌套此代码,可以看到没有跳转,执行了alert(1)。



程式語言編年史

程式語言編年史原文 下面這張圖片描繪了整個程式語言的歷史。包括各種程式語言的發明人、程式語言的特點和適用領域、被什麼網站或公司使用等 (檢視 完整高清圖 )。 之所以會有那麼多不同的程式語言是因為設計程式語言的初衷不同、對語言學習曲線的追求不同、不同程式之間的執行成本差異...