做为一个前端工程师如果想多挣点银子就要多学点知识,网络安全绝对的面试中必考的知识点,那么今天我们就来一起聊下网络安全相关的知识。
什么样的网站才是完全的网站?
一个安全的网站起码需要具备以下三个要素:
保密性,能够保护用户的数据信息不被泄露,敏感数据必须进行加密。完整性,用户的信息必须不能够被任意篡改,oAuth协议要求进行sign签名,就是为了保证双方数据的完整性。可用性,一个Web站点,各个功能点要运行正常,可被访问,对各种可能是错误有预防措施。SQL注入
SQL注入即是指web应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息。
SQL注入示例
我们在这个网站上发现了一个登录的页面,现在我们在表单中的Username中输入“admin”,Password中输入一样的字段
点击‘Login’登录按钮后,我们得到了一个报错的页面,根据提示“Syntax error (missing operator) in query expression username = admin\ AND password = admin\.”我们可以猜测到大概的SQL语句应该是“select * from [users] where username=? and password=?”
我们返回登录页面在Username和Password中输入“admin or 1”然后再点击登录,我们就登录成功了。
之所以能够登陆成功,是因为SQL的语句变成一下的语句:
根据SQL中逻辑运算的优先级,or低于and,最后的or ‘1’永远成立,所以该条件表达式结果为True,此语句同等于下面的这条语句
SQL注入防范措施:
输入验证
检查用户输入的合法性,尽量的限制用户输入特殊的符号,确信输入的内容只包含合法的数据。数据检查应当在客户端和服务器端都执行之所以要执行服务器端验证,是为了弥补客户端验证机制脆弱的安全性。
错误消息处理
防范SQL注入,还要避免出现一些详细的错误消息,因为可以利用这些消息。要使用一种标准的输入确认机制来验证所有的输入数据的长度、类型、语句、企业规则等。
加密处理
在一开始的CDNS例子中没有加密的数据就直接被利用了,但是加密了就不一定会解密成功,尽量不要用一些常见的加密算法,就算用也要使用32位以上的加密算法,将用户登录名称、密码等数据加密保存。加密用户输入的数据,然后再将它与数据库中保存的数据比较,这相当于对用户输入的数据进行了“消毒”处理,用户输入的数据不再对数据库有任何特殊的意义,从而也就防止了注入SQL命令。
存储过程来执行所有的查询
SQL参数的传递方式将防止利用单引号和连字符实施注入。此外,它还使得数据库权限可以限制到只允许特定的存储过程执行,所有的用户输入必须遵从被调用的存储过程的安全上下文,这样就很难再发生注入式了。
总结
开发过程中工程师需要确保拼接到SQL查询语句中的变量都要经过escape过滤函数,养成良好的编程习惯,对任何客户端的数据来源都要保持高度的怀疑态度,只有经过过滤的数据才能放到SQL语句中进行执行,也可以借助一些成熟的框架来帮助我们阻止SQL注入攻击。
如果觉得《前端工程师面试必考Web网络安全之 SQL注入示例及防范措施》对你有帮助,请点赞、收藏,并留下你的观点哦!