Dream Gallery 是国外一个相册程序,album.php 页面通过传入参数 id 的值来查看不同的专辑,由于没有对传入的 id 的值进行过滤,导致存在 SQL 注入,可获取数据名等。
#### 分析
存在问题的文件位置:
```
<?php
$db->query( "select * from albuns order by album_name asc" )->fetchAll();
if ( $db->rows >= 1 )
{
$albuns = $db->data;
foreach ( $albuns as $album )
{
$a = ( object ) $album;
$db->query( "select * from fotos where foto_album = $a->album_id order by foto_pos asc" )->fetchAll();
if ( $db->rows >= 1 )
{
$f = ( object ) $db->data[0];
?>
<div class="box-detail box-alb" id="<?= $a->album_id ?>">
<div class="box-inner-alb">
<a href="album.php?id=<?= $a->album_id ?>" caption="<?= utf8_decode( $a->album_name ) ?>">
<img src="thumb.php?img=fotos/<?= $f->foto_url ?>" />
<div class="box-inner-fx">
<h2><?= utf8_decode( $a->album_name ) ?></h2>
</div>
</a>
</div>
<div class="box-bottom">
<div class="box-bottom-right-photo"><?= $db->rows ?> foto(s)</div>
</div>
</div>
<?php
}
}
}
?>
```
可以看到 ```$a->album_id``` 直接被构造进 SQL 语句进行查询,由于可以导致 SQL 注入。
#### 测试效果

暂无评论