web项目面试问题

项目如何保证安全性

1.弱口令漏洞

解决方案:最好使用至少6位的数字、字母及特殊字符组合作为密码。数据库不要存储明文密码,应存储MD5加密后的密文,由于目前普通的MD5加密已经可以被破解,最好可以多重MD5加密,或者多种加密方式叠加组合。

2.未使用用户名及密码登录后台可直接输入后台URL登录系统。

解决方案:spring aop实现登录权限拦截

3.sql注入问题

使用mybatis编写sql语句时,提供了#{ }和${ }两种方式 进行模糊查询。

${ }表示拼接字符串,将接收到的参数内容不进行任何处理拼接在SQL中,会出现SQL注入问题。

#{ }会先对sql语句进行预处理,不会出现SQL注入问题。

4.cookie安全

cookie仅保存sessionID值,设置httpOnly属性为ON。

5.异常处理页面处理

不要直接抛出异常的详细信息给用户,自定义一个exception类将异常信息包装起来,防止用户看到程序内部的一些细节。

6.日志

增加服务的访问日志,记录来访者的IP及传递参数,记录后台管理人员的操作内容。完整的日志记录可以帮助我们发现潜在危险,找到已经发生的问题。

项目中曾遇到过什么问题

1. mysql插入中文发生乱码

  • 查看表字符编码,发现表的默认字符集是latin1,并不是utf8,在创建表的时候指定字符集为utf8,此时linux上mysql显示中文正常了,但是客户端依旧显示乱码

  • 采用show variables like ’%char%‘命令,可以看到character_set_database和character_set_server的字符集都是latin1,可知在mysql数据库中,server、database、table的字符集默认都是latin1。因此修改字符编码:set character_set_database=utf8;set character_set_server=utf8;

  • 重开一个mysql命令窗口,会发现server和database的字符集依然是latin1,由此可知mysql设置变量的范围默认为session范围,设置多个会话的字符集需要设置global范围,

    即set global character_set_database=utf8;set global character_set_server=utf8;设置完后,我们跨会话查看mysql字符集都是utf8。

  • 然而,当重启数据库的时候,发现字符集又变成了Latin1了,最后我们修改了mysql配置文件/etc/my.cnf。重启数据库也不会再变成Latin1

my.cnf文件
character-set-server=utf8 
[client]
default-character-set=utf8 
[mysql]
default-character-set=utf8

2.并发写入发生错误
(待续)

猜你喜欢

转载自blog.csdn.net/tubro2017/article/details/89159806