WEB应用安全防御之SQL注入、XSS、CSRF

SQL注入

将恶意的SQL语句通过表单等传递给后台SQL数据库引擎执行,针对程序员编程时的疏忽,通过SQL语句,实现无帐号登录,甚至篡改数据库。

防御措施

  • 用户输入的数据进行严格的校验处理
  • PreparedStatement采用预编译语句集,它内置了处理SQL注入的能力,只要使用它的setXXX方法传值即可

  • 使用正则表达式过滤传入的参数

  • 对敏感字符进行过滤

  • jsp中调用该函数检查是否包函非法字符,防止SQL从URL注入

  • JSP页面判断代码:使用javascript在客户端进行不安全字符屏蔽

XSS

跨站脚本(Cross-site scripting,通常简称为XSS)是一种网站应用程序的安全漏洞攻击,是代码注入的一种。它允许恶意用户将代码注入到网页上,其他用户在观看网页时就会受到影响。这类攻击通常包含了HTML以及用户端脚本语言。

防御措施

  • 过滤特殊字符
  • 使用 HTTP 头指定类型

CSRF

跨站请求伪造(英语:Cross-site request forgery),也被称为 one-click attack 或者 session riding,通常缩写为 CSRF 或者 XSRF, 是一种挟制用户在当前已登录的Web应用程序上执行非本意的操作的攻击方法。

防御措施

  • 检查referer字段
  • 添加校验token

应用集成JWT解决安全防御问题

JSON Web Token(JWT)是一个非常轻巧的规范。这个规范允许我们使用JWT在用户和服务器之间传递安全可靠的信息。

JWT的组成

一个JWT实际上就是一个字符串,它由三部分组成,头部、载荷与签名。

头部(Header)

头部用于描述关于该JWT的最基本的信息,例如其类型以及签名所用的算法等。这也可以被表示成一个JSON对象。

载荷(Payload)

{ "iss": "Online JWT Builder",
  "iat": 1416797419,
  "exp": 1448333419,
  "aud": "www.example.com",
  "sub": "jrocket@example.com",
  "GivenName": "Johnny",
  "Surname": "Rocket",
  "Email": "jrocket@example.com",
  "Role": [ "Manager", "Project Administrator" ]
}
  • iss: 该JWT的签发者,是否使用是可选的;
  • sub: 该JWT所面向的用户,是否使用是可选的;
  • aud: 接收该JWT的一方,是否使用是可选的;
  • exp(expires): 什么时候过期,这里是一个Unix时间戳,是否使用是可选的;
  • iat(issued at): 在什么时候签发的(UNIX时间),是否使用是可选的;

签名(Signature)

将上面的两个编码后的字符串都用句号.连接在一起(头部在前),就形成了:

eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJmcm9tX3VzZXIiOiJCIiwidGFyZ2V0X3VzZXIiOiJBIn0

最后,将上面拼接完的字符串用HS256算法进行加密。在加密的时候,我们还需要提供一个密钥(secret)。如果用mystar作为密钥的话,那么就可以得到我们加密后的内容:

34831-20160622152259735-1969767936

34831-20160622152344250-1238130627

本站公众号
   欢迎关注本站公众号,获取更多程序园信息
开发小院