共计 3516 个字符,预计需要花费 9 分钟才能阅读完成。
H5 目前的技术曾经趋于成熟。它开发周期短开发周期短,投入和保护成本低,兼容性好。依据需要,H5 能够制作文字、图形、音频、视频,因而能够用于 PC 网站、手机网站、微站、Web App、轻利用。而且因为最近 AIGC 的大火,它的制作老本变得更低。
H5 的利用场景次要包含展现、营销、考察、游戏等等。
不过作为重要的挪动互联网服务载体,H5 在给用户带来便当体验的同时,也让企业面临信息泄露、歹意劫持、薅羊毛等各类业务危险。
明天咱们就来看看怎么去防护 H5。
常见业务危险
链接伪造危险。 攻击者通过伪造的 H5 网页链接,入侵毁坏业务零碎乃至内网,窃取重要信息、账户明码等。
页面篡改危险。H5 网页代码遭篡改复制,做成钓鱼页面,盗取用户账户明码和信息等。
信息泄露危险。H5 网页被植入恶意代码,盗取访问者的账号密码、隐衷信息等。
账号破解危险。H5 往往是 App 或小程序应用服务的延长,与平台账户体系关联,很容易成为攻击者盗取账号、破解明码的重要指标。
“薅羊毛”危险。 通过 H5 网页举办的各类优惠活动企业次要的拓客伎俩,“薅羊毛”不仅毁坏了失常的营销规定,白白耗费大量流动资金,更无奈保障新注册用户的精准性,导致营销流动成果功亏一篑。
业务防护思路
咱们次要从业务平安的角度来进行防护,具体包含以下几个点(代码只是简略提供思路,仅供参考):
数据安全防护: 因为 H5 业务中会波及到用户数据的收集和存储,因而必须采取紧密的数据安全防护措施,例如数据加密、数据备份、访问控制等。
- 数据加密示例代码
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') |
- 数据备份示例代码
import shutil | |
# 数据备份函数 | |
def backup_data(src_path, dst_path): | |
# 应用 shutil 库的 copytree 函数进行数据备份 | |
shutil.copytree(src_path, dst_path) | |
print('数据备份胜利') |
- 访问控制示例代码
# 用户列表 | |
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 等攻打。
挨个来看看示例代码:
- 代码审计
# 破绽代码 | |
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 |
- 代码加密
import py_compile | |
# 加密代码 | |
py_compile.compile('main.py') | |
# 运行加密后的代码 | |
import main | |
main.main() |
- 防护 XSS
<!-- 原始代码 --> | |
<script> | |
var name = '{{name}}'; | |
document.write('Hello,' + name + '!'); | |
</script> | |
<!-- 修复后的代码 --> | |
<script> | |
var name = '{{name|escapejs}}'; | |
document.write('Hello,' + name + '!'); | |
</script> |
- 防护 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 的防护上,要思考诸多因素。
以上的示例仅供参考,后期的防护和前期的安全监控同样重要,因而,也必须重点关注风控这块。
以上。
业务平安产品:收费试用