【问题标题】:PHP Pagination SQL SecurityPHP 分页 SQL 安全性
【发布时间】:2014-04-15 19:51:25
【问题描述】:

以下代码存在 SQL 漏洞,我需要一些帮助来保护它;我不是 PHP 或 MySQL 的向导。

我已经四处搜索并看到了一些与 MySQL 真正的转义字符串等有关的非常有用的东西,但是在实施时它只会导致白页

    if(!isset($_GET['pg'])) { $page = 1; } else { $page = $_GET['pg']; }
    $select = (($page * 20) - 20); 
$mysql_result = mysql_query("SELECT `id` FROM `{$lgsl_config['db']['prefix']}{$lgsl_config['db']['table']}` WHERE ".implode(" AND ", $mysql_where)." ORDER BY id ASC LIMIT $select, 20") or die(mysql_error());

<?
$servers = mysql_result(mysql_query("SELECT COUNT(*) as Num FROM data_servers"),0); 
$pages = ceil($servers / 20); 

if(!isset($_GET['pg'])) { $page = 1; } else { $page = $_GET['pg']; }

if($page > 1)
{
$prev = ($page - 1);
echo "<a href='?pg=$prev'>[Inapoi]</a> "; 
}

for($show = 1; $show <= $pages; $show++)
{
if(($page) == $show)
{
echo $show;
}
else
{
echo " <a href='?pg=$show'>[$show]</a> ";
}
}

if($page < $pages)
{ 
$next = ($page + 1); 
echo " <a href='?pg=$next'>[Next]</a> "; 
}
?> 

证明代码实际上是易受攻击的 在您的网址末尾添加 ?pg=mysql

你应该会收到一个 MySQL 语法错误

【问题讨论】:

  • 您通常应该检查代码的所有输入,特别是 $_GET['pg'] 的值 - 只需在将输入传递到任何其他代码部分之前检查输入的类型和值,不不管它是否与 SQL 相关。
  • 那么下面的内容对我有什么用 add_slashes,mysql_escape_string,mysql_real_escape_string 或者我必须做一个 preg_match
  • 简单的解决方法是使用检查强制转换为整数 is_numeric($pg) 如果不是则使用默认值 (1) 转义数据然后查询。

标签: php sql pagination


【解决方案1】:

由于您不直接使用$page,而是对其进行了数学运算,因此如果它不是数字值,则如果它不是数字(例如,如果它是字符串)。

我还是建议添加一些控件,以确保:

if(!isset($_GET['pg']) || !is_numeric($_GET['pg'])) { $page = 1; } else { $page = (int) $_GET['pg']; }

通过这种方式,您可以确定$page 包含一个整数。

在这种情况下,您不需要任何转义函数,但如果您直接使用任何其他 $_GET$_POST 变量,那么您应该考虑它。

【讨论】:

  • 感谢 Entropy 似乎做得很好我已经尝试过 ?pg=mysql 并且我没有收到更多语法错误我不确定是否有其他方法来测试 mysql 注入?但是您的代码似乎已经很好地完成了这项工作:)
  • 这样就不能用那个变量注入mysql了,因为通过$_GET['pg']传递的所有类型的字符串都被转换成一个数字。如果这对您有所帮助,请不要忘记:meta.stackexchange.com/questions/5234/… ;)
  • 是的,它不再显示任何语法错误,除非我当然这样做?pg=0
【解决方案2】:

我会查看这些链接,仔细阅读并理解他们所说的保护您的代码和服务器的内容

http://phptutorial.info/?mysql-real-escape-string
http://www.sitepoint.com/php-security-blunders/
http://roshanbh.com.np/2008/05/tighten-php-security-functions.html

当我学习 php 编码的安全方面时,他们帮助了我

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多