MySQL注入安全性分析

MySQL注入安全性分析
如果用户输入了一个Web页面,它将被插入到MySQL数据库中,离开安全问题的机会称为SQL注入打开。

注入通常是在处理用户输入时发生的,比如它们的名称,而不是名称,它们会给出一个MySQL语句,该语句将在数据库中不知不觉地运行

不要相信用户提供的数据,只需通过模式匹配来验证数据。在下面的示例中,用户名仅限于字母数字字符,加上8到20个字符之间的下划线——规则是根据需要修改的。
如果(preg_match( / ^ W { 8.20 } $ /
{
结果= mysql_query美元(SELECT * FROM用户
用户名= $匹配{ 0 } ;
}
其他的
{
用户名不被接受;
}

为了解释这个问题,它被认为是一个总结:
假定的输入
$name =qadir'delete用户;;
mysql_query(从users名称={姓名}美元);

函数调用应该匹配用户指定的检索记录在用户表的名称列的名称。正常情况下,名称只包含字母数字字符或空格的字符串,如髂骨。但在这里,美元的名字是通过附加一个新的查询的数据库称为灾难:注射删除查询删除所有用户的记录。

幸运的是,如果MySQL是用于查询堆栈不在mysql_query允许()函数或多个查询是一个函数调用执行。如果你想堆一个查询,调用失败。

其他PHP数据库扩展,如SQLite和PostgreSQL,乐于执行查询的查询字符串中执行所有的查询,并创建一个严重的安全问题。

防止SQL注入:

你可以处理所有的聪明的脚本语言所有的转义字符,如Perl和PHP的功能mysql_real_escape_string()通过PHP MySQL扩展提供()进入MySQL的特点是逃跑。
如果(get_magic_quotes_gpc())
{
$name = stripslashes($name);
}
$name = mysql_real_escape_string($name);
mysql_query(从users名称={姓名}美元);

这样的困境:

为了解决这样的问题,一个用户自定义的逃逸机制必须提供_ %和字成词,用的是要编码的()功能,您可以指定一个字符范围逃脱。
美元是要编码的子=(mysql_real_escape_string(% something_ ),% _ );
/ / $子= = _ %的东西
mysql_query(SELECT * FROM在邮件的主题如{ } $子%);

免责声明:本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕。
相关文章
返回顶部