齐博x1第五季《项目实战-留言板》22-安全过滤1
即时演示地址:http://x1.alaiyeshi.net/msgboard
到目前为止,留言板基本完成了,但是基于安全我们需要思考下面几个问题:
1,多行文本框是不过滤脚本的,如果用户提交js脚本或者html格式就乱了;
2,用户频繁发送留言怎么办;
3,想加一个验证码再发送留言;
4,如何禁止某个ip留言;
5,在默认审核的情况下,用户公开发布不适当的留言的解决方案;
代码过滤
我们留言表单有三个表单元素,邮箱地址和手机都已经前后台加入了验证,非对应格式会返回错误信息
但是我们的文本只验证了字数,没有验证内容,如果发送代码内容会出现一些问题
我们看下面提交的信息:
我们内嵌了html,并加了内联的css,文字就改变了,那么我们要加入其他css,或者加入img什么的,
就会彻底破坏掉当前留言墙的布局结构,这是很不好的。
另外如果我们加入js脚本,危害就更大了。
我们提交一个弹出框的js,我们看下:
当我们刷新到这条记录的时候,js脚本就会被执行,如果提交一些破坏性js脚本,危害可想而知。
所以我们需要在内容提交后,过滤掉content内容中的代码:
我们只需要用系统提供的filtrate函数过滤下就可以了,这个系统提供的函数,会把js和html一些危害脚本自动转义,这样就安全多了。
我们再提交带代码的内容就会被自动转义展示出来。
这里必须又得给齐博系统加个赞,封装了很多方便的函数,避免了自己重复造轮子,否则可以想象一下自己得花很多时间来给脚本转义。
用户频繁发布留言的问题
如果用户频繁的发送留言,或者利用外挂机器发布,这些都是很讨厌的。
所以我们在这里加入一个时间限制,多长时间,留言只能发布一次。
看下代码:
我们将代码放置到验证代码checkdata里,这个毕竟也算验证方法。
我们再发布留言的时候,可以设置一个cookie来记录当前时间,再次发送的时候就会判断这个cookie是否存在,
如果存在,就用当前时间减去cookie的时间,如果差值小于预定的间隔时间,那么就返回错误,如果大于间隔时间就正常发送,
并再次记录cookie,这样就起到了限定作用。
比如我们当前限定的间隔时间是10秒:
这里间隔时间是写死的,不方便调用,毕竟用户不会去修改代码。所以又要用到参数选项的时候了。
我们可以想象的到,去setting里再加个参数字段,然后把对应字段放在这里,不就非常方便设置了吗;
我们用number字段,来限定数字约束
避免参数调用太长,我们在方法开头定义一个变量来接收此参数,这样后面使用变量方便一些
我们把刚刚的10秒,替换一下即可。
到此我们为其命名为留言板1.17版本,即msgboard 1.17
来源: 神盾工作室 转载请注明出处!
查看更多评论