rest - 如何防止 SQL 注入(inject)并提高 REST API 的安全性?

标签 rest security go websecurity application-security

我是 REST API 的新手,正在开发一个将用于 iOS/Android/Web 应用程序的 API,但我不熟悉这些 API 在发布后面临的威胁。
我到处都看到这些相同的提示:

  • 使用 oAuth 2 允许交易,
  • 仅接收和发送加密的 JSON Web token ,
  • 使用 SSL/TTL。

  • 我认为使用 SSL/TLS 和 JWT 应该足以保证发送/接收数据的安全性,但即便如此,如果有人窃取凭据,我还是担心 SQL 注入(inject)的可能性。
    我应该检查对 SQL 注入(inject)字符串 (such as this one) 的请求吗?
    如果我要支持用户登录,使用 oAuth 而不是 JWT 是否更有意义?

    最佳答案

    sql-i

  • 使用准备好的语句会给你带来很多好处(further reading)
  • 考虑使用 ORM 层与您的数据库接口(interface)(例如:gorm)

  • 安全原则
  • 始终在对其执行任何操作之前验证用户输入
  • 对于每个操作,如果您知道通用选项集,请选择允许列表方法与拒绝列表方法(即,如果字符串属于我的已知列表,我将只允许它通过)

  • 授权
  • jwt 只是一种 token 格式(类似于您的身份证),您可以将 oauth 用于底层 authz(在允许您访问某些资源之前检查您的身份证)——阅读更多 here
  • 不记名 token (如 jwt)应始终通过 TLS/SSL 发送,以防止入侵者访问明文 jwt (rfc7523)
  • 随着产品的成熟,您可能希望转移到开始分配存储在手机上的 session token 的模型,但这通常伴随着处理撤销的复杂性(例如:何时/如何轮换 session token ?)
  • 关于rest - 如何防止 SQL 注入(inject)并提高 REST API 的安全性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65532464/

    相关文章:

    java - 连接到数据库的 RESTful Web 服务,实体管理器为空

    jquery 不会为 Rails 标准 REST DELETE 答案调用 $.ajax 上的成功方法

    java - 我可以使用 Object#hashCode 来存储密码的哈希值吗?

    php - PHP 的 password_verify() 对极长密码(DoS 攻击)是否安全?

    javascript - 允许用户在应该在我的应用程序外部查看的页面中添加 javascript 代码是否危险?

    google-app-engine - 尝试将实体放入数据存储区似乎只放置了一个键,而不是我想到的关联属性

    php - 为什么在 Restful 实现中使用 $_SESSION 不好?

    java - 将 Xwiki 与现有 Angular 应用程序结合使用

    json 解码/解码在 json 中没有按预期工作

    go - go中的pprof导入开销有多大