MySQL Proxy(解決注入的另一思路)

來源:互聯網
上載者:User

作者:雲舒
What is MySQL Proxy?
MySQL Proxy is a simple program that sits between your client and MySQL server(s) that can monitor, analyze or transform their communication. Its flexibility allows for unlimited uses; common ones include: load balancing; failover; query analysis; query filtering and modification; and many more. 可以看到,MySQL Proxy的主要作用是用來做負載平衡,資料庫讀寫分離的。但是需要注意的是,MySQL Proxy還有個強大的擴充功能就是支援Lua語言——魔獸也是使用了Lua來開發遊戲,據我所知網易也是——可以參見雲風的部落格。這樣一種擴充,就給了我讓他做別的事情的思路——防止注入攻擊。

啟動MySQL Proxy的時候,載入一個Lua指令碼,對每一個進入的query或者insert之類的語句做一次安全檢查,甚至替換查詢中的某些內容,這樣在程式員的 程式中忘記了過濾參數的情況下,還有最後一道防線可用。而且由於是Lua這樣的動態指令碼語言,在開發,修正,部署方面都會有極大的靈活性。當然,或許會擔 心效能方面的問題,那麼在前面加memcached吧,或者乾脆用c來寫這樣的擴充,畢竟MySQL Proxy是開源的,而且有清晰的介面。

MySQL Proxy提供給Lua的介面主要有以下幾個函數:

connect_server() — 這個函數每次client串連的時候被調用,可以用這個函數來處理負載平衡,決定當前的請求發給那個背景伺服器,如果沒有指定這個函數,那麼就會採用簡單的輪詢機制。

read_handshake() — 這個函數在server返回初始握手資訊時被調用,可以調用這個函數在驗證資訊發給伺服器前進行額外的檢查。

read_auth() — client發送驗證資訊給伺服器的時候會調用這個函數。

read_auth_result() — 伺服器驗證資訊返回後調用這個函數。

read_query() — 每次client發送查詢請求函數的時候被調用,可以用這個函數進行查詢語句的預先處理,過濾掉非預期的查詢等等,這個是最常用的函數。

read_query_result() — 查詢結果返回是調用的函數,可以進行結果集處理。

可以看到,自由發揮之後還是有很多其它的事情可以做的。不知道現在有沒有公司這麼做,或者說做過這方面的嘗試。我只是寫一個小思路,可行不可行, 等以後再去檢驗吧。最近牙疼的厲害,唉,小時候不注意,現在治療保護都來不及了。以後有了自己的寶寶,我會吸取教訓的,呵呵,與君共勉。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.