
Go में लिखित डेटाबेस फ़ायरवॉल
आपके अनुप्रयोग सर्वर से आने वाले प्रश्नों का निरीक्षण करके और असामान्य प्रश्नों को अस्वीकार करके आपके डेटा की सुरक्षा करता है।
उदाहरण के लिए, वेब सर्वर सामान्यतः डेटाबेस सर्वर के साथ इस प्रकार संवाद करता है:

डेटाबेस सर्वर के सामने DBShield जोड़कर हम इसे असामान्य प्रश्नों से बचा सकते हैं। असामान्य प्रश्नों का पता लगाने के लिए हम पहले DBShield को सीखने के मोड (learning mode) में चलाते हैं। सीखने का मोड किसी भी प्रश्न को पास करने देता है लेकिन इसके बारे में जानकारी (पैटर्न, उपयोगकर्ता नाम, समय और स्रोत) आंतरिक डेटाबेस में रिकॉर्ड करता है।

पर्याप्त पैटर्न एकत्र करने के बाद हम DBShield को सुरक्षा मोड (protect mode) में चला सकते हैं। सुरक्षा मोड असामान्य प्रश्न पैटर्न, उपयोगकर्ता और स्रोत को पहचान सकता है और कॉन्फ़िगरेशन के आधार पर कार्रवाई कर सकता है।

डेमो के लिए, हम user.php पर SQL इंजेक्शन भेद्यता का शोषण करने के लिए sqlmap (स्वचालित SQL इंजेक्शन और डेटाबेस अधिग्रहण उपकरण) का उपयोग कर रहे हैं।
पहले परिदृश्य में, sqlmap सफलतापूर्वक SQL इंजेक्शन का शोषण करता है जब वेब अनुप्रयोग सीधे डेटाबेस (MySQL) से जुड़ा होता है। दूसरे परिदृश्य में, हम user.php को संशोधित करते हैं ताकि DBShield वेब अनुप्रयोग और डेटाबेस के बीच आ जाए, जो इंजेक्शन प्रयास को गिरा देगा और sqlmap को विफल कर देगा।

CLI
$ go run main.go
2016/10/15 16:25:31 [INFO] Config file: /etc/dbshield.yml
2016/10/15 16:25:31 [INFO] Internal DB: /tmp/model/10.0.0.21_postgres.db
2016/10/15 16:25:31 [INFO] Listening: 0.0.0.0:5000
2016/10/15 16:25:31 [INFO] Backend: postgres (10.0.0.21:5432)
2016/10/15 16:25:31 [INFO] Protect: true
2016/10/15 16:25:31 [INFO] Web interface on https://127.0.0.1:8070/
2016/10/15 16:25:33 [INFO] Connected from: 10.0.0.20:35910
2016/10/15 16:25:33 [INFO] Connected to: 10.0.0.21:5432
2016/10/15 16:25:33 [INFO] SSL connection
2016/10/15 16:25:34 [DEBUG] Client handshake done
2016/10/15 16:25:34 [DEBUG] Server handshake done
2016/10/15 16:25:34 [INFO] User: postgres
2016/10/15 16:25:34 [INFO] Database: test
2016/10/15 16:25:34 [INFO] Query: SELECT * FROM stocks where id=-1 or 1=1
2016/10/15 16:25:34 [WARN] Pattern not found: [53 55 51 52 55 52 50 53 55 51 53 49 115 116 111 99 107 115 53 55 51 53 50 105 100 54 49 52 53 53 55 51 55 57 53 55 52 48 52 53 55 51 55 57 54 49 53 55 51 55 57] (SELECT * FROM stocks where id=-1 or 1=1)
2016/10/15 16:25:34 [WARN] Dropping connection
वेब इंटरफ़ेस

इसे प्राप्त करें
$ go get -u github.com/nim4/DBShield
फिर आप "-h" तर्क का उपयोग करके सहायता देख सकते हैं:
$ $GOPATH/bin/DBShield -h
DBShield 1.0.0-beta3
Usage of DBShield:
-a get list of abnormal queries
-c file
config file (default "/etc/dbshield.yml")
-h show help
-k show parsed config and exit
-l get list of captured patterns
-version
show version
और इसे अपने कॉन्फ़िगरेशन के साथ चलाएँ, जैसे:
$ $GOPATH/bin/DBShield -c config.yml
नमूना कॉन्फ़िगरेशन फ़ाइल देखें
⚠️ चेतावनी: उत्पादन वातावरण में डिफ़ॉल्ट प्रमाणपत्रों का उपयोग न करें!
(प्राथमिकता के अनुसार क्रमबद्ध)
| डेटाबेस | सुरक्षा | SSL |
|---|
| DB2 | ![]() | ![]() |
| MariaDB | ![]() | ![]() |
| MySQL | ![]() | ![]() |
| Oracle | ![]() | ![]() |
| Postgres | ![]() | ![]() |