I am writing some scripts for Expression Engine and have been told that every single piece of data which we output to the page, requires 'sanitizing', to prevent XSS.
For example here, I am fetching all Categories from the database, sorting into an array and returning to Expression Engine.
PHP Function
public function categories()
{
$query = $this->crm_db->select('name, url_name')
->order_by("name", "asc")
->get_where('activities_categories', array('active'=>1));
foreach($query->result() as $row)
{
$activityCategories[0]['cats'][] = array(
'categoryName' => $row->name,
'categoryURL' => $row->url_name,
);
}
return $this->EE->TMPL->parse_variables($this->EE->TMPL->tagdata, $activityCategories);
}
Template Code
{exp:activities:categories}
{cats}
<a href="/{categoryURL}">{categoryName}</a>
{/cats}
{/exp:activities:categories}
I am being told, that I need to use htmlspecialchars() function on every single piece of data which is being outputted.
Is this necessary?
Is this correct?
Example:
foreach($query->result() as $row)
{
$activityCategories[0]['cats'][] = array(
'categoryName' => htmlspecialchars($row->name),
'categoryURL' => htmlspecialchars($row->url_name),
);
}
Many thanks! :)