MySQL:发布到互联网上时需要注意的地方

6 篇文章 0 订阅

不在发布文件夹中放着重要信息

1、扩展名为php的文件不能被公开

2、不想让其他人看到服务器上的文件内容,可以通过更改属性来限制访问

3、把写入密码等重要信息的文件放在发布文件夹中是非常危险的

1、如何读取其他文件的脚本

可以将作为web服务器的计算机设置为不对文件夹进行发布。包含重要信息的文件必须放在难以猜到位置的私有文件夹中。防止在发布文件夹中的文件不包含重要信息,需要用到的信息从其他地方读入即可。

2、读取其他PHP脚本文件

使用require_once命令为例,在使用该命令读取文件的情况下,文件只会被读取一次,无果无法读取文件,则停止处理。include_once命令只会读取一次,即使读取失败也会继续处理。

创建有重要信息的文件db_info.php,然后保存在不被发布的文件夹中

其他文件simple_select.php读取重要信息文件db_info.php

1、控制只打开一次的函数require_once打开重要信息文件夹db_info.php

2、调用db_info.php文件的属性名进行获取信息

避免在查询中输入非法数据

1、SQL注入点查找

发送方:simple.html:subnit提交编号

接收方:simple_delete.php:$_post["b1"]接收编号,进行查询:delete from rbk where empid=$b1_d

可以预想到tbk中的6和12等记录编号会赋给$b1_d

2、SQL注入

在输入需要删除编号的文本框中输入:1 or 1=1

即查询语句为:delete from rbk where empid=1 or 1=1

即empid=1的时候,或1=1的时候,就表示【所有记录都满足条件】

也就是说不仅第1个记录会被删除,表中所有数据都会被删除

3、预防措施

禁止输入非数字值

拿上面的实例来说,只要创建一个“如果发送了数字以外的数据,就不执行delete”的机制就可以了。

正则表达式

正则表达式是一种用于描述字符排列模式的方法,如[0-9]表示包含0到9的数字。

1、典型表达式

包含[]

[7]:包含了7

[0-9]:包含了数字

[a-z]:包含了小写字母

[A-Z]:包含了大写字母

[A-Za-z]:包含了大写字母或小写字母

[A-Z][0-9]:开头是大写字母,之后是数字的连续字符的模式

包含指定字符外的字符

[^0-9]:不包含数字

[^A]:包含A以外的字符

[^A-Z]:大写字母以外字符

[^0-9a-zA-Z]:数字和字母以外字符

其他

^h:以h开头

E$:以E结尾

7{3}:连续出现3次以上的7

2、使用正则表达式进行模糊查询

preg_match函数

preg_match函数是一个使用正则表达式进行模糊查询的函数。模糊查询不是瞄准某一个对象进行查询,二是查找具有某种特征的字符,从而得出更多检索结果的一种查询方式。

正则表达式需要用/括起来,如/[A-Za-z]/:包含所有字符,下面代码使用了正则表达式/[A-Za-z]/来检查字符串1234,因为字符串1234中不包含字母,所以结果会显示不包含

3、正则表达式检查非法输入

示例

检查邮编格式是否为“XXX-XXXX”

检查点:以3个0-9数字开始,以4个0-9数字结束

检查步骤:

3个0-9数字:[0-9]{3}

开始:^

4个0-9数字:[0-9]{4}

结束:($)

下面查询结果为暂且是ok的,但是想要在互联网上发布,仅仅这么做是不够的,为了进行更为严密的查询,还需要添加各种正则表达式。

如果不是数字则不进行查询

如果在$b1_d中输入字母等字符,则会显示“不要输入除数字外的内容”,并且不执行delete查询命令,如果没有输入字母等字符,就执行删除操作。

为了万全之策,不仅要检查是否输入了除数字意外的值,还要严格检查输入的数字是否恰当。

不执行非预期标签

1、发送恶意标签

例如非预期标签为:

html文件:send.html

php接收文件:receive.php

在文本框a中输入标签

因为html只负责发送字符,hph只负责打印字符,打印出标签内容那就直接使用到了页面上了。如果输入标签可以执行脚本,在某种情况下就会造成严重后果。

2、漏洞攻击

综上所述,将在web上输入的内容直接输出到页面上的程序时危险的,不怀好意的人会通过不断发送脚本使用户在无意中执行而已脚本。针对此类系统漏洞的攻击会一直持续下去,因此我们需要制作出能够避免脚本混入的web应用程序。

3、移除输入标签

让输出字符串中包含的标签无效,可以使用htmlspecialchars函数将标签等特殊字符转为其他字符串。

通过htmlspecialchars函数执行的转换

<:&lt

>:&gt

&:&amp

":&quot

':'

单引号只能在第2参数指定为ent_quotes的情况下进行,输入上面等符号,htmlspecialchars函数能够将这些字符转换为无法执行相应功能的字符串。

print ($_post["a"]);可以转换成

print htmlspecialchars($_post["a"]);

4、如何创建安全的脚本

1、放置在发布文件夹中的文件要尽量可能缩减到最少。一定不要放置密码等重要数据。对文件和文件夹设置访问限制

2、创建一个能够严格检查输入数据,并禁用指定格式意外的值的机制

3、创建一个不会根据发送的值执行预想之外的操作的机制

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
  大家好,我是录制课程的老师,课程已经上线课堂,欢迎大家试听,感谢同学们的支持。在你们的学习中我会全力助你提升MySQL技能,助你冲击更高年薪。支持课程答疑,支持一对一答疑服务,由课程老师直接回答。    MySQL凭借着它不错的性能、不错的稳定性、数据的安全性常年稳居行业老二宝座。    越来越多的DBA和后端同学在工作中少不了和MySQL打交道,也经常会产生这样的疑问:    为什么我写的sql语句性能这么低?  为什么明明我建了索引却没有用到索引?  为什么突然我的数据就成了乱码?  为什么我备份的文件在主库恢复,数据无法同步到从库?  为什么我的数据库数据不多,却占了很多的空间?  生产中我应该选择哪种隔离级别?  生产中都在使用innodb存储引擎,我却对它一无所知?  我应该怎么规划缓冲池才能让数据库性能更高?  为什么我做表数据迁移这么慢?  为什么我写的sql会造成那么多的锁冲突、死锁?  为什么我不能将数据恢复到任意时间点?  为什么我不能解决公司主从复制架构中的故障?  吧啦吧啦一大堆问题……    在面试中MySQL的一些知识更成为躲不过的问题,比如b+tree索引、MVCC、隔离级别的实现、锁的使用,主从复制,MySQL性能优化、事务两阶段提交等等都成为了面试考题重灾区。    我的课程就是从实际工作来,从问题出发,带着问题来学习MySQL,想解决问题就要学习新的知识,大家跟紧老司机,MySQL的面纱就会慢慢摘下。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值