动态

详情 返回 返回

分析 | H5常見的業務風險及防護思路 - 动态 详情

H5 目前的技術已經趨於成熟。它開發週期短開發週期短,投入和維護成本低,兼容性好。根據需求,H5可以製作文字、圖形、音頻、視頻,因此可以用於PC網站、手機網站、微站、Web App、輕應用。而且由於最近AIGC的大火,它的製作成本變得更低。

H5的應用場景主要包括展示、營銷、調查、遊戲等等。

不過作為重要的移動互聯網服務載體,H5在給用户帶來便利體驗的同時,也讓企業面臨信息泄露、惡意劫持、薅羊毛等各類業務風險。

今天我們就來看看怎麼去防護H5。

常見業務風險

鏈接偽造風險。攻擊者通過偽造的H5網頁鏈接,入侵破壞業務系統乃至內網,竊取重要信息、賬户密碼等。

頁面篡改風險。H5網頁代碼遭篡改複製,做成釣魚頁面,盜取用户賬户密碼和信息等。

信息泄露風險。H5網頁被植入惡意代碼,盜取訪問者的賬號密碼、隱私信息等。

賬號破解風險。H5往往是App或小程序應用服務的延伸,與平台賬户體系關聯,很容易成為攻擊者盜取賬號、破解密碼的重要目標。

“薅羊毛”風險。通過H5網頁舉辦的各類優惠活動企業主要的拓客手段,“薅羊毛”不僅破壞了正常的營銷規則,白白消耗大量活動資金,更無法保障新註冊用户的精準性,導致營銷活動效果功虧一簣。

業務防護思路

我們主要從業務安全的角度來進行防護,具體包括以下幾個點(代碼只是簡單提供思路,僅供參考):

數據安全防護:因為H5業務中會涉及到用户數據的收集和存儲,因此必須採取嚴密的數據安全防護措施,例如數據加密、數據備份、訪問控制等。

  1. 數據加密示例代碼
import hashlib
import base64

# 數據加密函數
def encrypt(data):
    # 對數據進行SHA256哈希處理
    sha256 = hashlib.sha256()
    sha256.update(data.encode('utf-8'))
    hashed_data = sha256.digest()
    # 對哈希後的數據進行Base64編碼處理
    encoded_data = base64.b64encode(hashed_data)
    # 返回加密後的數據
    return encoded_data.decode('utf-8')
  1. 數據備份示例代碼
import shutil

# 數據備份函數
def backup_data(src_path, dst_path):
    # 使用shutil庫的copytree函數進行數據備份
    shutil.copytree(src_path, dst_path)
    print('數據備份成功')
  1. 訪問控制示例代碼
# 用户列表
users = [{'username': 'admin', 'password': '123456'}, {'username': 'user1', 'password': 'password1'}]

# 登錄函數
def login(username, password):
    # 遍歷用户列表進行登錄驗證
    for user in users:
        if user['username'] == username and user['password'] == password:
            print('登錄成功')
            return True
    # 登錄失敗
    print('登錄失敗')
    return False

# 訪問控制裝飾器
def require_login(func):
    def wrapper(*args, **kwargs):
        # 判斷用户是否登錄
        if 'username' in kwargs and 'password' in kwargs:
            username = kwargs['username']
            password = kwargs['password']
            if login(username, password):
                # 登錄成功,執行原函數
                return func(*args, **kwargs)
        # 用户未登錄,返回錯誤信息
        return '請登錄後再進行操作'
    return wrapper

# 需要進行登錄驗證的函數
@require_login
def secret_info():
    return '這是一些秘密信息'

# 使用示例
if __name__ == '__main__':
    # 備份數據
    backup_data('/path/to/data', '/path/to/backup')
    # 訪問受限的函數
    print(secret_info(username='admin', password='123456'))
    # 訪問受限的函數(未登錄)
    print(secret_info())

網絡安全防護:H5業務通常涉及到數據傳輸和網絡交互,因此必須採取有效的網絡安全防護措施,例如SSL/TLS加密、防火牆、反向代理等。
簡單給一個SSL/TLS的代碼:

import socket
import ssl

# 服務器地址和端口號
server_address = ('localhost', 8888)

# 創建socket對象
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 將socket包裝成SSL socket
ssl_sock = ssl.wrap_socket(sock, ssl_version=ssl.PROTOCOL_TLSv1_2, ciphers='ECDHE-RSA-AES256-SHA384')

# 連接服務器
ssl_sock.connect(server_address)

# 發送數據
ssl_sock.sendall('Hello, World!'.encode())

# 接收數據
data = ssl_sock.recv(1024)

# 關閉連接
ssl_sock.close()

代碼安全防護:H5業務開發過程中需要編寫大量的代碼,因此必須採取有效的代碼安全防護措施,例如代碼審計、代碼加密、防禦XSS和CSRF等攻擊。
挨個來看看示例代碼:

  1. 代碼審計
# 漏洞代碼
def execute_sql(user_id):
    sql = "SELECT * FROM users WHERE user_id='%s'" % user_id
    cursor.execute(sql)
    results = cursor.fetchall()
    return results

# 修復代碼
def execute_sql(user_id):
    sql = "SELECT * FROM users WHERE user_id=%s"
    cursor.execute(sql, (user_id,))
    results = cursor.fetchall()
    return results
  1. 代碼加密
import py_compile

# 加密代碼
py_compile.compile('main.py')

# 運行加密後的代碼
import main
main.main()
  1. 防護XSS
<!-- 原始代碼 -->
<script>
    var name = '{{ name }}';
    document.write('Hello, ' + name + '!');
</script>

<!-- 修復後的代碼 -->
<script>
    var name = '{{ name|escapejs }}';
    document.write('Hello, ' + name + '!');
</script>
  1. 防護CSRF
# 原始代碼
@app.route('/transfer_money')
def transfer_money():
    from_account = request.args.get('from_account')
    to_account = request.args.get('to_account')
    amount = request.args.get('amount')
    # 轉賬操作

# 修復後的代碼
@app.route('/transfer_money')
def transfer_money():
    from_account = request.args.get('from_account')
    to_account = request.args.get('to_account')
    amount = request.args.get('amount')
    # 校驗Referer字段
    referer = request.headers.get('Referer')
    if referer and 'example.com' in referer:
        # 轉賬操作
    else:
        abort(403)

結語

因為H5的開放的網絡環境、跨平台特性(H5應用可以運行在不同的操作系統和瀏覽器中,因此,對於黑客來説,他們可以選擇攻擊不同的平台和瀏覽器來獲取用户的信息和數據)以及H5應用的安全防護措施不足,導致H5極容易導致攻擊,所以在H5的防護上,要考慮諸多因素。

以上的示例僅供參考,前期的防護和後期的安全監控同樣重要,因此,也必須重點關注風控這塊。

以上。

業務安全產品:免費試用

user avatar lenglengdechaomian 头像 maimengdexiangjiao 头像 dexunyun 头像 shiwangdehuangdou_bpfcez 头像 danshendeyoutiao_zh9e3 头像 sectrend 头像
点赞 6 用户, 点赞了这篇动态!
点赞

Add a new 评论

Some HTML is okay.