emlog官方的“反垃圾评论”插件(感觉70%以上的人在用,因为内核代码里没有垃圾评论的处理,要处理垃圾评论只有用插件),未对某处xss进行过滤导致直接打管理员cookie。 代码如下:
<?php
while($res = $DB->fetch_array($query)):
$ishide = $res['hide']=='y'?'<font color="red">[待审]</font>':'';
$mail = !empty($res['mail']) ? "({$res['mail']})" : '';
$ip = !empty($res['ip']) ? "<br />IP:<a href=\"./plugin.php?plugin=anti_spam_comment&advance=true&ip={$res['ip']}\">{$res['ip']}</a>" : '';
$url = !empty($res['url']) ? "({$res['url']})" : '';
$res['content'] = str_replace('<br>',' ',$res['comment']);
$sub_content = subString($res['content'], 0, 50);
$res['title'] = subString($res['title'], 0, 42);
?>
<tr>
<td><input type="checkbox" value="<?php echo $res['cid']; ?>" name="com[]" class="ids" /></td>
<td><a href="./plugin.php?plugin=anti_spam_comment&advance=true&act=edit&cid=<?php echo $res['cid']; ?>" title="<?php echo $res['content']; ?>"><?php echo $sub_content; ?></a> <?php echo $ishide; ?>
<br /><?php echo smartDate($res['date']); ?>
<span style="display:none; margin-left:8px;">
<a href="javascript: asc_confirm(<?php echo $res['cid']; ?>, 'name');">屏蔽内容</a>
<a href="javascript: asc_confirm(<?php echo $res['cid']; ?>, 'url');">删除地址</a>
</span>
</td>
<td><a href="./plugin.php?plugin=anti_spam_comment&advance=true&poster=<?php echo urlencode($res['poster']);?>"><?php echo htmlspecialchars($res['poster']);?></a> <?php echo $url; ?> <?php echo $ip;?> <?php echo $mail;?></td>
<td><a href="./plugin.php?plugin=anti_spam_comment&advance=true&gid=<?php echo $res['gid']; ?>"><?php echo $res['title']; ?></a></td>
</tr>
<?php endwhile; ?>
数据库中取出评论内容$res[‘comment’],$sub_content取前50个字符就直接输出了。而且插入数据库时也未进行数据处理: 直接导致执行javascript: 可打cookie:
使用该cookie可以直接登录后台。 修复方案: echo htmlspecialchars($sub_content); |
评论前必须登录!
立即登录