|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
会PHP吗?会,我会把一加一的运算写在函数里,然后调用啦!进击 SQL注入进击是黑客进击网站最经常使用的手腕。假如你的站点没有利用严厉的用户输出查验,那末常轻易遭到SQL注入进击。SQL注入进击凡是经由过程给站点数据库提交不良的数据或查询语句来完成,极可能使数据库中的记载遭到表露,更改或被删除。上面来谈谈SQL注入进击是若何完成的,又若何提防。
看这个例子:
// supposed input
$name = “ilia’; DELETE FROM users;”;
mysql_query(“SELECT * FROM users WHERE name=’{$name}’”);
很分明最初数据库履行的号令是:
SELECT * FROM users WHERE name=ilia; DELETE FROM users
这就给数据库带来了灾害性的效果--一切纪录都被删除。
不外假如你利用的数据库是MySQL,那末还好,mysql_query()函数不答应直接履行如许的操作(不克不及单行停止多个语句操作),所以你可以宁神。假如你利用的数据库是SQLite或PostgreSQL,撑持如许的语句,那末就将面对没顶之灾了。
下面提到,SQL注入次要是提交不平安的数据给数据库来到达进击目标。为了避免SQL注入进击,PHP自带一个功效可以对输出的字符串停止处置,可以在较底层对输出停止平安上的初步处置,也即Magic Quotes。(php.ini magic_quotes_gpc)。假如magic_quotes_gpc选项启用,那末输出的字符串中的单引号,双引号和其它一些字符前将会被主动加上反斜杠\。
但Magic Quotes并非一个很通用的处理计划,没能屏障一切有潜伏风险的字符,而且在很多办事器上Magic Quotes并没有被启用。所以,咱们还需求利用其它多种办法来避免SQL注入。
很多数据库自己就供应这类输出数据处置功效。例如PHP的MySQL操作函数中有一个叫mysql_real_escape_string()的函数,可将特别字符和能够引发数据库操作失足的字符本义。
看这段代码:
//假如Magic Quotes功用启用
if (get_magic_quotes_gpc()) {
$name = stripslashes($name);
}else{
$name = mysql_real_escape_string($name);
}
mysql_query(“SELECT * FROM users WHERE name=’{$name}’”);
注重,在咱们利用数据库所带的功效之前要判别一下Magic Quotes是不是翻开,就像上例中那样,不然两次反复处置就会失足。假如MQ已启用,咱们要把加上的\去失落才失掉真实数据。
除对以上字符串模式的数据停止预处置以外,贮存Binary数据到数据库中时,也要注重停止预处置。不然数据能够与数据库本身的存储格局相抵触,引发数据库溃散,数据纪录丧失,乃至丧失全部库的数据。有些数据库如PostgreSQL,供应一个专门用来编码二进制数据的函数pg_escape_bytea(),它可以对数据停止相似于Base64那样的编码。
如:
// for plain-text data use:
pg_escape_string($regular_strings);
// for binary data use:
pg_escape_bytea($binary_data);
另外一种情形下,咱们也要采取如许的机制。那就是数据库体系自己不撑持的多字节言语如中文,日语等。个中有些的ASCII局限和二进制数据的局限堆叠。
不外对数据停止编码将有能够招致像LIKE abc% 如许的查询语句生效。
终于理解了数据库的概念,而且让你兴奋不已的是你终于可以通过PHP来连接数据库了,这期间你是怎么学会的,我们不去考证了,但是事实证明,你已经可以了。 |
|