服务器端编程-WEB安全(SQL注入、XSS、CSRF)

参考

http://wiki.open.qq.com/wiki/Web%E6%BC%8F%E6%B4%9E%E6%A3%80%E6%B5%8B%E5%8F%8A%E4%BF%AE%E5%A4%8D

SQL注入

Web程序代码中对于用户提交的参数未做过滤就直接放到SQL语句中执行,导致参数中的特殊字符打破了SQL语句原有逻辑,黑客可以利用该漏洞执行任意SQL语句。

预防措施是对数据类型做限制:
  1. 对于整数,判断变量是否符合[0-9]的值;其他限定值,也可以进行合法性校验
  2. 对于字符串,对SQL语句特殊字符进行转义(单引号转成两个单引号,双引号转成两个双引号)关于这点,PHP有类似的转义函数mysql_escape_string和mysql_real_escape_string。

XSS

Web程序代码中把用户提交的参数未做过滤就直接输出到页面,参数中的特殊字符打破了HTML页面的原有逻辑,黑客可以利用该漏洞执行恶意HTML/JS代码、构造蠕虫传播、篡改页面实施钓鱼攻击等。
预防措施参考:
http://wiki.open.qq.com/wiki/Web%E6%BC%8F%E6%B4%9E%E6%A3%80%E6%B5%8B%E5%8F%8A%E4%BF%AE%E5%A4%8D#1.1_SQL.E6.B3.A8.E5.85.A5.E6.BC.8F.E6.B4.9E

XSS之所以会发生, 是因为用户输入的数据变成了代码。 所以我们需要对用户输入的数据进行HTML Encode处理。 将其中的"中括号", “单引号”,“引号” 之类的特殊字符进行编码。
具体防范:http://www.cnblogs.com/TankXiao/archive/2012/03/21/2337194.html

CSRF

跨站请求伪造,预防措施是在请求中带着一个一次性token,这个token同时存在于server端的cookie或者session,请求提交到server后,验证这个一次性token,验证成功则销毁一次性token,下次请求需要获得新的token才能正常提交。

Redis未授权访问缺陷可轻易导致系统被黑

Redis 默认情况下,会绑定在 0.0.0.0:6379,这样将会将Redis服务暴露到公网上,如果在没有开启认证的情况下,可以导致任意用户在可以访问目标服务器的情况下未授权访问Redis以及读取Redis的数据。攻击者在未授权访问Redis的情况下可以利用Redis的相关方法,可以成功将自己的公钥写入目标服务器的 /root/.ssh 文件夹的authotrized_keys 文件中,进而可以直接登录目标服务器。
参考:https://www.seebug.org/vuldb/ssvid-89715?from=timeline&isappinstalled=0)

解决方法
  1. 配置bind选项, 限定可以连接Redis服务器的IP, 并修改redis的默认端口6379.
  2. 配置AUTH, 设置密码, 密码会以明文方式保存在redis配置文件中.
  3. 配置rename-command CONFIG "RENAME_CONFIG", 这样即使存在未授权访问, 也能够给攻击者使用config指令加大难度
  4. 好消息是Redis作者表示将会开发”real user”,区分普通用户和admin权限,普通用户将会被禁止运行某些命令,如config

你可能感兴趣的:(服务器端编程-WEB安全(SQL注入、XSS、CSRF))