http://sourceforge.net/projects/phpns/
Do samych newsów system spisuje się dobrze, ale chciałbym włączyć komentarze pod newsami i nie jestem pewny co do bezpieczeństwa. Phpns nie wykorzystuje bowiem PDO tylko zwykły MySQL do operacji na bazach danych. Ma co prawda jakieś zabezpieczenia:
Kod
$new_res = general_query('INSERT INTO '.$databaseinfo['prefix'].'articles
(article_title,
article_subtitle,
article_author,
article_cat,
article_text,
article_exptext,
article_imgid,
allow_comments,
start_date,
end_date,
active,
approved,
timestamp,
ip)
VALUES ("'.$data['article_title'].'",
"'.$data['article_subtitle'].'",
"'.$author.'",
"'.$data['article_cat'].'",
"'.$data['article_text'].'",
"'.$data['article_exptext'].'",
"http://'.$globalvars['path_to_uri'].'/'.$data['image'].'",
"'.$data['acchecked'].'",
"'.$unixtime['start']['unix'].'",
"'.$unixtime['end']['unix'].'",
"'.$data['achecked'].'",
"'.$data['approved'].'",
"'.$globalvars['time'].'",
"'.$news_ip.'");');
(article_title,
article_subtitle,
article_author,
article_cat,
article_text,
article_exptext,
article_imgid,
allow_comments,
start_date,
end_date,
active,
approved,
timestamp,
ip)
VALUES ("'.$data['article_title'].'",
"'.$data['article_subtitle'].'",
"'.$author.'",
"'.$data['article_cat'].'",
"'.$data['article_text'].'",
"'.$data['article_exptext'].'",
"http://'.$globalvars['path_to_uri'].'/'.$data['image'].'",
"'.$data['acchecked'].'",
"'.$unixtime['start']['unix'].'",
"'.$unixtime['end']['unix'].'",
"'.$data['achecked'].'",
"'.$data['approved'].'",
"'.$globalvars['time'].'",
"'.$news_ip.'");');
Następnie w funkcji general_query() wywoływana jest funkcja clean_data(), która jak sądzę (może błędnie?) jest jakimś zabezpieczeniem:
Kod
function general_query($query,$array=FALSE) { //for simple/misc queries
if ($clean == TRUE) {
$query = clean_data($query); //clean
}
$res = mysql_query($query) or die('<p><textarea style="width: 50%; height: 200px;">FAILED QUERY: '.$query.'
'.mysql_error().'</textarea></p>');
//return value or not?
if ($array == TRUE) { //if we want a value
$value = mysql_fetch_array($res);
return $value;
} else {
return $res;
}
}
if ($clean == TRUE) {
$query = clean_data($query); //clean
}
$res = mysql_query($query) or die('<p><textarea style="width: 50%; height: 200px;">FAILED QUERY: '.$query.'
'.mysql_error().'</textarea></p>');
//return value or not?
if ($array == TRUE) { //if we want a value
$value = mysql_fetch_array($res);
return $value;
} else {
return $res;
}
}
Funkcja clean_data() ma taką definicję:
Kod
function clean_data($data) {
if (is_array($data)) {
foreach ($data as $key => $value) {
if(ini_get('magic_quotes_gpc')) { $data[$key] = stripslashes($value); }
$data[$key] = htmlspecialchars($value, ENT_QUOTES);
}
} else {
if(ini_get('magic_quotes_gpc')) { $data = stripslashes($data); }
$data = htmlspecialchars($data, ENT_QUOTES);
}
return $data;
}
if (is_array($data)) {
foreach ($data as $key => $value) {
if(ini_get('magic_quotes_gpc')) { $data[$key] = stripslashes($value); }
$data[$key] = htmlspecialchars($value, ENT_QUOTES);
}
} else {
if(ini_get('magic_quotes_gpc')) { $data = stripslashes($data); }
$data = htmlspecialchars($data, ENT_QUOTES);
}
return $data;
}
Czy Waszym zdaniem takie zabezpieczenia starczą, żeby np. ktoś nie skasował mi całej bazy danych? A może jedynym wyjściem będzie przejście np. na Wordpress (który pewnie korzysta z PDO)?