共计 3766 个字符,预计需要花费 10 分钟才能阅读完成。
Web 平安
名词定义
窃听者:在网络中通过抓包、劫持等形式可能获取用户申请数据的 Hacker
窃密者:通过非正常伎俩可获取到用户数据的 Hacker
攻击者:具备肯定计算机网络根底可能通过工具或者自主开发工具实现非凡目标的 Hacker
摘要算法:音讯摘要算法是密码学算法中十分重要的一个分支,它通过对所有数据提取指纹信息以实现数据签名、数据完整性校验等性能。
因为其不可逆性,有时候会被用做敏感信息的加密。加密算法:加密(英语:Encryption)是将明文信息扭转为难以读取的密文内容,使之不可读的过程。只有领有解密办法的对象,经由解密过程,能力将密文还原为失常可读的内容。加密算法即加密的办法。
TOP 1 拜访越权
- 未进行最小权限校验
通常因为未对用户集体 / 设施等隐衷数据的拜访、批改进行应该权限查看而呈现的越权拜访;普通用户通过伪造申请拜访管理员能力拜访的数据等
⚔️
原申请:curl 'http://example.com/getUserInfo' -H 'accessToken:abc' -d '{"uid":123}'
返回 123 用户的信息批改后的申请:
curl 'http://example.com/getUserInfo' -H 'accessToken:abc' -d '{"uid":321}'
返回 321 用户的信息普通用户伪造申请:
curl 'http://example.com/getAdminUserList'
🛡️
- 针对有用户属性资源(如用户信息、用户上传的非公开图片、用户集体资产等)的申请需校验以后申请用户的权限
- 针对有设施属性资源(如打印申请、打印历史记录等)的申请需校验以后申请用户是否有该设施权限
- 对于后盾类资源申请需校验用户管理员权限
- 重放攻打
网络中存在窃听者将获取到的用户申请数据用于反复申请获取敏感信息
⚔️
原申请:
curl 'http://example.com/resetPassword' -H 'accessToken:abc' -d '{"smsCode":1234}'
申请后用户可进入用户明码重置流程反复申请:
curl 'http://example.com/resetPassword' -H 'accessToken:abc' -d '{"smsCode":1234}'
申请后窃听者可进入用户明码重置流程🛡️
- 每个申请增加申请工夫,对于过期的申请间接拦挡
- 可在分发给用户的 token 中关联用户 IP、设施等信息,对于 IP、设施更换的申请间接拦挡(在挪动网络中用户的 IP 可能随时变动会导致影响普通用户应用,须要留神业务是否须要如此高的危险等级)
- 篡改申请
因为未对残缺的申请参数进行签名,导致窃听者获取到用户申请后能够通过批改申请参数实现不同的目标
⚔️
原申请:
curl 'http://example.com/transferMoney' -H 'accessToken:abc' -H 'sign:abcd' -H 'requestTime:1024' -d '{"toAccount":123,"money":100}'
(其中 sign 仅对 requestTime、accessToken 做签名)批改后的申请:
curl 'http://example.com/transferMoney' -H 'accessToken:abc' -H 'sign:abcd' -H 'requestTime:1024' -d '{"toAccount":321,"money":100000}'
🛡️
- 对所有的申请参数进行签名而不是局部参数(如 sign(requestParam,body))
- 对于有须要参加签名的参数应用 body 而不是 header 传输(header 蕴含其余非业务参数无奈做对立签名)
敏感数据透露
通常呈现在用户的明码、人脸信息、签名信息等敏感信息在网络传输过程中或存储过程中未进行妥善的脱敏解决;加密算法未增加适合的随机因子导致密钥可被计算
⚔️
泄露用户明码的申请:
curl 'http://example.com/login' -d '{"username":"test","password":"1234"}'
明文存储用户明码:
INSERT INTO user (id, uid, password, name) VALUES (null, 100000, '123456', 'test');
简略哈希存储用户明码:
INSERT INTO user (id, uid, password, name) VALUES (null, 100000, md5('123456'), 'test');
AES 加密过程应用固定的 iv:
mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $screct_key, $str, MCRYPT_MODE_CBC, "\0\0\0\0\0\0\0\0");
蕴含用户敏感信息(如身份证照片)的图片、文件间接寄存在公网:https://pic3.zhimg.com/50/v2-…
蕴含用户鉴权信息的 URL 申请:
curl 'http://example.com/getUserInfo?sessionId=abc'
🛡️
- 在凋谢网络中应用 https 而非 http
- 网络传输可只传输用户明码哈希后的值如:
curl 'http://example.com/login' -d '{"username":"test","password":md5("1234")}'
- 存表的用户明码等不须要解密的敏感数据加盐哈希后存表能够防止数据库数据泄露后被彩虹表破解明码
- 蕴含用户敏感信息的图片、文件应存在公有空间中,公网连贯应有实效性,对于没有实时性展现用处的图片、文件还应进行数据加密后存储,应用时长期解密
- 浏览器、服务端日志等通常都会被动记录用户申请的 URL,防止将用户鉴权信息通过 URL 的形式传递,缩小用户鉴权信息裸露危险
注入
- SQL 注入
通过扭转既定的 SQL 语义实现对数据库的非法拜访或管制
⚔️
$column = array_get($requestParam, "column", "*"); $clientId = array_get($requestParam, "clientId"); $obj = new Dao(); $client = $obj->getRow("id", $column, "clientId=?", $clientId); return $client;
🛡️
- 应用参数绑定及对用户输出的参数进行校验和过滤,防止用户
- 本地开发时应用工具检测(如 SQL 注入工具:sqlmap)
平安设计缺点
- 不平安的第三方申请
对于第三方申请未进行加密或无效鉴权,导致本应提供给特定第三方应用的服务或接口被攻击者滥用。通常通过为每个第三方颁发一套加密、签名信息(如:利用 ID、利用密钥),安全性要求较低的申请可通过特定算法计算所有申请参数的签名值再作为附加申请参数申请,安全性要求适中的申请则通过通用对称加密算法加密数据申请,安全性要求高的申请则通过非对称加密算法协商出对称加密密钥后通过对称加密申请。
- 重要申请未多重验证
对于重要申请(如:余额领取、取现、敏感信息批改、更换设施登录等)未进行多重校验。通常通过人脸、短信、隐衷信息校验、辅助校验的形式进行多重用户身份验证防止用户账号被盗产生损失。
- 重要数据通过内部传入
重要的信息通过内部间接传入,后端未做任何校验间接应用
⚔️
通过入参管制领取金额的申请:
curl 'http://example.com/pay' -d '{"orderId":1,"money":10}'
🛡️
- 内部入参只传递非必要信息,重要数据由服务端外部自行获取:
curl 'http://example.com/pay' -d '{"orderId":1}'
订单领取金额由服务端外部查问
业务平安
垃圾内容(文本 / 图片)
对于用户无任何价值或蕴含发布者非凡目标的内容
⚔️
垃圾内容通常包含:广告、黄赌毒、涉政舆论等
🛡️
通常能够通过人工审核、机器审核(机器学习算法)、关键字匹配等形式对垃圾内容进行过滤或内容替换
脚本攻打
攻击者出于某种非凡目标模仿普通用户应用脚本批量调用要害接口
⚔️
通常容易被攻打的接口:短信验证码、登录、注册、秒杀等
🛡️
通常通过减少申请前验证(如:图形验证码、人机识别系统)的形式进行机器调用拦挡,对于秒杀等可能取得较大利益的场景可通过提前预约的形式进行事先验证,防止攻击者利用打码平台等人工绕过验证。
信息泄露
用户敏感信息在治理后盾、申请日志、用户信息页面等明文展现或申请的接口中明文返回
⚔️
用户的敏感信息:如用户姓名、手机号、身份证号、地址、打印文件门路等
🛡️
针对须要展现用户敏感信息的场景对所展现的数据做脱敏解决,的确须要展现的可通过多重验证后展现
敏感操作
对于可能存在法律危险的操作
⚔️
敏感操作通过包含:网络借贷、重要信息(如:集体征信、银行流水等)受权等
🛡️
对敏感操作进行存证,存证形式如:人脸、电子签名、第三方电子签约等,对于存在法律危险的操作法院个别会要求提供由第三方作为公证的存证(即数据不可本人保留又作为自证证据,因为数据可能被篡改的)。
参考文献
- 《OWASP Top 10:2021》Open Web Application Security Project (OWASP) 是致力于进步软件安全性的非营利基金会
By 佐柱
转载请注明出处,也欢送偶然逛逛我的小站,谢谢:)