资讯专栏INFORMATION COLUMN

防止sql注入的方法

GHOST_349178 / 3517人阅读

摘要:打开来防止注入注入是非常危险的问题,小则网站后台被入侵,重则整个服务器沦陷,所以一定要小心。虽然国内很多程序员仍在依靠防止注入,还是建议大家加强中文防止注入的检查。

1.

打开magic_quotes_gpc来防止SQL注入
SQL注入是非常危险的问题,小则网站后台被入侵,重则整个服务器沦陷,
所以一定要小心。php.ini中有一个设置:

magic_quotes_gpc = Off
这个默认是关闭的,如果它打开后将自动把用户提交对sql的查询进行转换,
比如把 " 转为 "等,这对防止sql注射有重大作用。所以我们推荐设置为:

magic_quotes_gpc = On
(10) 错误信息控制

一般php在没有连接到数据库或者其他情况下会有提示错误,一般错误信息中会包含php脚本当

前的路径信息或者查询的SQL语句等信息,这类信息提供给黑客后,是不安全的,所以一般服务器建议禁止错误提示:

display_errors = Off

如果你却是是要显示错误信息,一定要设置显示错误的级别,比如只显示警告以上的信息:

error_reporting = E_WARNING & E_ERROR

当然,我还是建议关闭错误提示。

(11) 错误日志

建议在关闭display_errors后能够把错误信息记录下来,便于查找服务器运行的原因:

log_errors = On

同时也要设置错误日志存放的目录,建议根apache的日志存在一起:

error_log = D:/usr/local/apache2/logs/php_error.log

注意:给文件必须允许apache用户的和组具有写的权限。

MYSQL的降权运行

新建立一个用户比如mysqlstart

net user mysqlstart fuckmicrosoft /add

net localgroup users mysqlstart /del

不属于任何组

如果MYSQL装在d:mysql ,那么,给 mysqlstart 完全控制 的权限

然后在系统服务中设置,MYSQL的服务属性,在登录属性当中,选择此用户 mysqlstart 然后输入密码,确定。

重新启动 MYSQL服务,然后MYSQL就运行在低权限下了。

如果是在windos平台下搭建的apache我们还需要注意一点,apache默认运行是system权限,

这很恐怖,这让人感觉很不爽.那我们就给apache降降权限吧。

net user apache fuckmicrosoft /add

net localgroup users apache /del

ok.我们建立了一个不属于任何组的用户apche。

我们打开计算机管理器,选服务,点apache服务的属性,我们选择log on,选择this account,我们填入上面所建立的账户和密码,

重启apache服务,ok,apache运行在低权限下了。

实际上我们还可以通过设置各个文件夹的权限,来让apache用户只能执行我们想让它能干的事情,给每一个目录建立一个多带带能读写的用户。

这也是当前很多虚拟主机提供商的流行配置方法哦,不过这种方法用于防止这里就显的有点大材小用了。 

2

虽然国内很多PHP程序员仍在依靠addslashes防止SQL注入,还是建议大家加强中文防止SQL注入的检查。addslashes的问题在于黑客可以用0xbf27来代替单引号,而addslashes只是将0xbf27修改为0xbf5c27,成为一个有效的多字节字符,其中的0xbf5c仍会被看作是单引号,所以addslashes无法成功拦截。

当然addslashes也不是毫无用处,它是用于单字节字符串的处理,多字节字符还是用mysql_real_escape_string吧

if (!get_magic_quotes_gpc()) {
 
$lastname = addslashes($_POST[‘lastname’]);
 
} else {
 
$lastname = $_POST[‘lastname’];
 
}
最好对magic_quotes_gpc已经开放的情况下,还是对$_POST[’lastname’]进行检查一下。

再说下mysql_real_escape_string和mysql_escape_string这2个函数的区别:

mysql_real_escape_string 必须在(PHP 4 >= 4.3.0, PHP 5)的情况下才能使用。否则只能用 mysql_escape_string ,两者的区别是:mysql_real_escape_string 考虑到连接的

当前字符集,而mysql_escape_string 不考虑。
总结一下:

* addslashes() 是强行加;

* mysql_real_escape_string() 会判断字符集,但是对PHP版本有要求;

* mysql_escape_string不考虑连接的当前字符集。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/23067.html

相关文章

  • php操作mysql防止sql注入(合集)

    摘要:参考中如何防止注入参数化查询为什么能够防止注入上面提供的资料比较多,下面根据自己的理解整理出来。使用的预处理参数化查询可以有效防止注入。我们在上面预处理参数化查询是在中进行防注入操作的,其实也内置了一个预处理的模拟器,叫做。 由于segmentfault在处理特殊字符时也并非完美,所以下面文章中有些符号被转换了,请到本人博客下载原文txt http://www.yunxi365.cn/...

    kviccn 评论0 收藏0
  • PHP中该怎样防止SQL注入?

    摘要:预处理语句和参数分别发送到数据库服务器进行解析,参数将会被当作普通字符处理。解析当你将语句发送给数据库服务器进行预处理和解析时发生了什么通过指定占位符一个或者一个上面例子中命名的,告诉数据库引擎你想在哪里进行过滤。 问题描述: 如果用户输入的数据在未经处理的情况下插入到一条SQL查询语句,那么应用将很可能遭受到SQL注入攻击,正如下面的例子: $unsafe_variable = $_...

    Panda 评论0 收藏0
  • web安全基础

    摘要:安全基础常见的安全攻击手段有很多,比如注入,,,头攻击,攻击,重定向攻击,上传文件攻击等,其中大多数都可以通过三种方法过滤代理转义实体化来解决。个人趋向于安全狗,同时安装服务器安全狗和网站安全狗可以有效地防护攻击。 web安全基础 常见的web安全攻击手段有很多,比如SQL注入,XSS,CSRF,HTTP头攻击,cookie攻击,重定向攻击,上传文件攻击等,其中大多数都可以通过三种方法...

    starsfun 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<