跳到主要內容

發表文章

目前顯示的是 12月, 2019的文章

如何佈署Python Web 服務 - How to deploy Flask web app with WSGI + Nginx

需要 Gunicorn Nginx Step 1. 部屬Flask app程式碼 複製程式碼到指定位置 e.g /var/www/flaskapp $ sudo mkdir /var/www/flaskapp $ sudo chmod 777 /var/www/flaskapp Step 2. 安裝WSGI Server (Gunicorn)  安裝 sudo apt-get install gunicorn or pip install gunicorn Step 3. 安裝web server (Nginx) sudo apt-get install nginx 設定 sudo vim /etc/nginx/site-avalidable/default 將內容改成如下 server {     listen 80;     server_name 10.36.172.142; # external domain name     location / {         proxy_pass http://0.0.0.0:5678 ; # point to gunicorn host address         proxy_set_header Host $host;         proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;     }   } 啟動 sudo service nginx restart Step 4. 啟動Gunicorn gunicorn -w 4 -b 0.0.0.0:5678 {主程式檔名}:{flask實體名稱} 假設我們主程式叫做main.py內容如下 from flask import Flask app = Flask(__name__) if __name__ == '__main__':  

何謂 Cross-Site Scripting? 如何避免 - How to prevent Cross-Site Scripting (XSS)

前言 攻擊者向有Cross-Site Scripting (XSS) 漏洞的網站值入惡意的HTML指令碼, 當用戶在瀏覽網站時, 由於瀏覽器無法判斷被植入的指令碼是否可信, 造成這些惡意指令碼被執行而達到攻擊的目的 列如: 訪問cookie, 改寫HTML 如何避免 過濾 過濾可疑字元, 比如說用戶上傳的DOM屬性和script, link, style, iframe等等 驗證 驗證資料格式, 每筆資料基本上都會有預期的輸入格式, 若不符合格式, 就應該禁止用戶提交表單 編碼 對輸入的某些字元進行編碼, 比如 ” < > & C#預設會幫我們把表單中的輸入做編碼, 當然也可以把它關掉然後自己去呼叫Server.HtmlEncode [HttpPost] [ValidateInput(false)] public ActionResult NewItem(string Text1) { ViewBag.Text1 = Server.HtmlEncode(Text1); return View("Index"); } 透過瀏覽器來防堵XSS攻擊 Server Side在回傳的Header裡埋入X-XSS-Protection的資訊, 讓用戶端的瀏覽器幫我們檢查是否有XSS的情況發生, 並進一步停止加載 Node.js // simple case, you can set the X-XSS-Protection header to 1; mode=block. // This tells browsers to detect and block reflected XSS. const xssFilter = require('x-xss-protection') // Sets "X-XSS-Protection: 1; mode=block". app.use(xssFilter()) C# 在web.config裡加入以下設定 <httpProtoc

Cookie與Session的差別 - Difference Between Cookie and Session

前言  HTTP是個Stateless的協議, 意思是說Client端發請求時, 並無法得知上一個請求的結果, 比如說做完登陸後, 網頁跳到了商品頁面時, 系統怎麼知道使用者登錄過了, 所以我們需要一種方式來儲存資料 粗略的講Cookie和Session是一種資料儲存的方式, 用來紀錄使用者在某特定網站下的活動資訊, 讓無狀態的HTTP協議擁有記憶的能力 Cookie  將在資料存在Client Side, 可以被看, 被改(除非用Signed Cookie, Server side拒絕改過的cookie), 屬於較不安全的儲存方式, 所以通常用來存放敏感度低的資料, 像是Remember Me的資訊 若要防止Cookie被竄改的話, 可以用簽章的方式確認資料是否被更動過, 而Server Side發現簽章有問題時再拒絕請求 基本上簽章的數位長度足夠的話,也不太需要擔心被偽造 Session  將資料存在Server Side上, 相較於Cookie來說算是比較安全的儲存作法 通常Server Side會返回一組Session Id 給Client存到Cookie裡面, 接下來的請求會根據Id去把先前存放的資訊給挖出來  儲存 Session 有下列方法:  1. Memory  2. Cookie  3. Cache  存Memory 會有Memory Leak的風險, 存Cookie會使的請求傳輸量變大, 所以通常正式環境主要還是存在Redis Cache中

使用MSBuild來自動化編譯及部屬ASP.NET Web應用程式到 Azure

Title: How to use MSBuild to deploy your .NET Web Application on Azure 前言 對於開發人員來說, routine的事情能夠自動化就自動化, 比如說編譯程式, 或是發布程式等等, 這些自動化之後, 才能將更多的專注力放在程式開發上, 以下就是介紹如何使用 MSBuild 來佈署.NET Framework的程式到Azure App Service上 MSBuild 用來佈署.Net framework到Azure 上的工具, 可以透過安裝Visual Studio來獲得, 使用方式如下: MSBuild <solution的位置> /p:DeployOnBuild  /p:PublishProfile /p:Password MSBuild 需要吃一個Publish Profile才能正常運作, 以下教學將會演示如何編輯Publish Profile, 並且使用 MSBuild 來做編譯以及佈署 必要條件 需要安裝Visual Studio 需要在Azure App Service建立服務   需要取得佈署帳密(Publish Profile) 需要安裝Azure Cli az webapp deployment list-publishing-profiles --name YOUR-APP-NAME --resource-group YOUR-RESOURCE-GROUP Step 1. 下載佈署範本 $appSolutionDeploymentProfile = ".\production.pubxml" wget https://gist.githubusercontent.com/andy51002000/37a0af3fec1caf2955f109c0b583b3e3/raw/9b2105abd05a304b8ea6045fe78c8de781f4d0a2/publish.pubxml -OutFile $appSolutionDeploymentProfile Step 2. 開始來編輯Publish Profile的內容 宣告一些變數

簡易教學-如何使用burp proxy來攔截封包

Title: How to Use Burp Suite 前言 嗨~ 大家好, 今天要分享如何在Windows 10上使用Burp Suite來攔截封包, 以及進一步地演示如何修改HTTP請求的內容, 希望這篇文章可以幫助到同為網頁開發者的朋友或是正在學習資訊安全的朋友們 首先, 下載 & 安裝 Burp Suit Community https://portswigger.net/burp/communitydownload Step 1. 打開Burp Suit建立暫時用的專案(Temporary Project) 一直下一步 > 最後選擇 Start Burp Step 2. 設定Proxy 在鍵盤上按下Windows鍵 > 輸入Proxy > 按下Enter 進入設定頁面後, 把Proxy Address 和 Port 的資訊填上, 如下 基本上, 環境都設好了 ... 接下來, 要試看看有沒有成功攔截封包 測試 沒有測試環境的朋友, 可以使用以下網站來當練習的對象,  雖然這網站主要目的是讓人學習XSS相關技術用的, 但由於它提供了一個非常簡單的表單功能, 所以很非常適合讓我們用來模擬POST請求 網站:  http://xss-quiz.int21h.jp/ 按下Search後, 可以在 Proxy > Intercept 裡看到剛剛表單送出的參數 lady gaga 修改請求內容 我們當然也可以滑鼠左鍵去修改表單內容 最後按下Forward將請求送出 結果 由於剛剛的請求內容被植入了一段javascript的程式碼, 所以結果會出現一個alert

Azure Logic Apps 如何設定Timeout來限制Action的執行時間: Logic App Timeout

Title: how to set timeout in Azure Logic App 前言 對開發人員來說, Logic Apps是個非常好用的工具, 特別是有DevOps需求, 或是想做自動化的開發者來說, 可以節省許多時間寫一堆Code或是腳本去串接服務 設計Logic Apps 直接在Azure Portal上定義Action的種類, Input是什麼就好了, 底層的事情就交給Azure 來幫我們處理 比如說, 我們可以設一個排程, 每隔一段時間就發個請求去搓一下某個Service是否還活著 Timeout 在某些情況下, 我們可能不希望Action的執行時間過長, 假設我們預期最多不超過10秒, 但因為訪問的端點有可能發生異常, 造成Actionc還傻傻地等待Server的回應 這種情況我們可以設Timeout讓Logic App把超時的Action殺掉 首先, 右鍵 > 選擇Settings Step 2. 找到Timeout的欄位設定Duration 這邊要注意填入的時間要使用ISO 8601 的格式 ISO 8601的規則  P (Period) T(duration) H (Hour) M(Minute) S(Second). 如果Timeout想設20秒的話可以表示成PT20S 設定好之後選擇Done ... 接下來就可以存檔跑看看結果了 ... 結果 如果有成功跑完的話, 會出現綠色小勾勾, 但如過被Timeout的話就沒有