! -> Note
$ -> Affected files
+12-Oct-2009 Janusz Dobrowolski
+# Fixed sql injection vulnerability on some php/mysql configurations
+$ /admin/db/users_db.inc
+! Single quotes also encoded before database data insert
+$ /admin/db/maintenance_db.inc
+ /includes/db/connect_db.inc
+ /reporting/includes/tcpdf.php
+ /sales/includes/cart_class.inc
+
------------------------------- Release 2.1.6 ----------------------------------
! Final Final release of the 2.1. series.
$ config.php
$out.="# Backup Date and Time: ".date("Y-m-d H:i")."\n";
$out.="# Built by " . $app_title . " " . $version ."\n";
$out.="# ".$power_url."\n";
- $out.="# Company: ". @html_entity_decode($company, ENT_COMPAT, $_SESSION['language']->encoding)."\n";
+ $out.="# Company: ". @html_entity_decode($company, ENT_QUOTES, $_SESSION['language']->encoding)."\n";
$out.="# User: ".$_SESSION["wa_current_user"]->name."\n\n";
// write users comment
// run through each field
for ($k = 0; $k < $nf = db_num_fields($res2); $k++)
{
- $out .= db_escape(@html_entity_decode($row2[$k], ENT_COMPAT, $_SESSION['language']->encoding));
+ $out .= db_escape(@html_entity_decode($row2[$k], ENT_QUOTES, $_SESSION['language']->encoding));
if ($k < ($nf - 1))
$out .= ", ";
}
$language, $profile, $rep_popup, $pos)
{
$sql = "INSERT INTO ".TB_PREF."users (user_id, real_name, password"
- .", phone, email, full_access, language, pos, print_profile, rep_popup)
+ .", phone, email, role_id, language, pos, print_profile, rep_popup)
VALUES (".db_escape($user_id).",
- ".db_escape($real_name).", ".db_escape($password) .",".db_escape($phone).",
- ".db_escape($email).", $full_access, ".db_escape($language).",
- $pos,".db_escape($profile).",$rep_popup)";
+ ".db_escape($real_name).", ".db_escape($password) .",".db_escape($phone)
+ .",".db_escape($email).", ".db_escape($role_id).", ".db_escape($language)
+ .", ".db_escape($pos).",".db_escape($profile).",".db_escape($rep_popup)
+ ." )";
db_query($sql, "could not add user for $user_id");
}
dec_sep=".db_escape($dec_sep).",
theme=".db_escape($theme).",
page_size=".db_escape($pagesize).",
- show_hints=$show_hints,
+ show_hints=".db_escape($show_hints).",
print_profile=".db_escape($profile).",
- rep_popup=$rep_popup,
- query_size=$query_size,
- graphic_links=$graphic_links,
+ rep_popup=".db_escape($rep_popup).",
+ query_size=".db_escape($query_size).",
+ graphic_links=".db_escape($graphic_links).",
language=".db_escape($lang)."
WHERE user_id = ".db_escape($user_id);
{
set_global_connection();
- $sql = "SELECT * FROM ".TB_PREF."users WHERE user_id = '$user_id' AND password='$password'";
+ $sql = "SELECT * FROM ".TB_PREF."users WHERE user_id = ".db_escape($user_id)
+ ." AND password=".db_escape($password);
return db_query($sql, "could not get validate user login for $user_id");
}
function db_escape($value = "", $nullify = false)
{
- $value = @htmlspecialchars($value, ENT_COMPAT, $_SESSION['language']->encoding);
+ $value = @htmlspecialchars($value, ENT_QUOTES, $_SESSION['language']->encoding);
//reset default if second parameter is skipped
$nullify = ($nullify === null) ? (false) : ($nullify);
*/
function unhtmlentities($text_to_convert) {
if (!$this->isunicode) {
- return html_entity_decode($text_to_convert);
+ return html_entity_decode($text_to_convert, ENT_QUOTES);
}
return html_entity_decode_php4($text_to_convert);
}
$this->trans_no = 0;
$this->order_no= $this->trans_type==13 ? key($src->trans_no) : $src->order_no;
}
- $this->reference = @html_entity_decode($this->reference);
- $this->Comments = @html_entity_decode($this->Comments);
+ $this->reference = @html_entity_decode($this->reference, ENT_QUOTES);
+ $this->Comments = @html_entity_decode($this->Comments, ENT_QUOTES);
foreach($this->line_items as $lineno => $line) {
- $this->line_items[$lineno]->stock_id = @html_entity_decode($line->stock_id);
- $this->line_items[$lineno]->item_description = @html_entity_decode($line->item_description);
+ $this->line_items[$lineno]->stock_id = @html_entity_decode($line->stock_id, ENT_QUOTES);
+ $this->line_items[$lineno]->item_description = @html_entity_decode($line->item_description, ENT_QUOTES);
}
switch($this->trans_type) {
case 10:
debtor.name,
branch.br_name,
debtor.curr_code,
+ @bal := @bal+trans.ov_amount,
(trans.ov_amount + trans.ov_gst + trans.ov_freight
+ trans.ov_freight_tax + trans.ov_discount) AS TotalAmount,
trans.alloc AS Allocated,
}
//------------------------------------------------------------------------------------------------
+db_query("set @bal:=0");
$cols = array(
_("Type") => array('fun'=>'systype_name', 'ord'=>''),
_("Customer") => array('ord'=>''),
_("Branch") => array('ord'=>''),
_("Currency") => array('align'=>'center'),
+ _("RB"),
_("Debit") => array('align'=>'right', 'fun'=>'fmt_debit'),
_("Credit") => array('align'=>'right','insert'=>true, 'fun'=>'fmt_credit'),
array('insert'=>true, 'fun'=>'gl_view'),