최근 극성인 엘리먼트 숨김 백링크 악성봇 차단방법
<?php
if(!defined("__XE__")) exit();
if(Context::get("content")&&strpos(Context::get("act"), "proc")>-1&&$called_position=="before_module_proc")
{
class mta
{
/**
* @author Lalafell (a.k.a Laighlinne)
* @brief reset preg_match_all result like C#
*/
public function match_to_array($a)
{
$b = array();
foreach($a as $key=>$val)
{
foreach($val as $k=>$v)
{
$b[$k][$key] = $v;
}
}
return $b;
}
}
$mta = new mta();
$content = Context::get("content");
$allow = TRUE;
$class_pattern = array("sound_only", "wfsr", "ui-helper-hidden");
$style_pattern = array("display"=>"none");
$reg = "/class=\"([^\"]+)\"/im";
$style_reg = "/style=\"([^\"]+)\"/im";
preg_match_all($reg, $content, $matches);
$matches = $mta->match_to_array($matches);
// using class check
foreach($matches as $key=>$val) // class
{
if(strpos($val[1], " ") > -1)
{
$items = explode(" ", $val[1]);
foreach($items as $v)
{
if(in_array($v, $class_pattern))
{
$allow = FALSE;
}
}
}
else
{
if(in_array($val[1], $class_pattern))
{
$allow = FALSE;
}
}
}
preg_match_all($style_reg, $content, $matches);
$matches = $mta->match_to_array($matches);
// using style check
foreach($matches as $key=>$val)
{
if(strpos($val[1], ";") > -1)
{
$items = explode(";", $val[1]);
foreach($items as $v)
{
$styles = explode(":", $v);
foreach($style_pattern as $rk=>$rv)
{
if($styles[0] == trim($rk) && $styles[1] == trim($rv))
{
$allow = FALSE;
}
}
}
}
else
{
$styles = explode(":", $v);
foreach($style_pattern as $rk=>$rv)
{
if($styles[0] == trim($rk) && $styles[1] == trim($rv))
{
$allow = FALSE;
}
}
}
}
if(!$allow)
{
echo "<msg>작성불가</msg>";
exit();
}
}
일단 글 몇개 검색해서 해당 내용으로 작성했을때는 안 되는데용...
상황이 다양하다 보니 잘 모르겠네요 작성이 아예 안되게 막습니다.
일반 이용자가 글 내에 클래스를 넣을 일도 없고 display:none를 넣을 일이 거의 없어서 아마 문제없이 될거 같네요...
애드온으로 만들어서 넣으시면 됩니다. 배포해도 되는데 음 버전관리가 귀찮은 작품이라서용...
일단 마켓에 올려놓겠습니다 ㅋㅋ;
댓글 2