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的防护上,要考虑诸多因素。

以上的示例仅供参考,前期的防护和后期的安全监控同样重要,因此,也必须重点关注风控这块。

以上。

业务安全产品:免费试用


小飞象
80 声望5 粉丝