Заголовок X-XSS-Protection
не делать то, что вы думаете, что он делает. См. What is the http-header "X-XSS-Protection" для приятного обзора. Но tl; dr - это то, что он позволяет некоторое поведение на IE8 +.
Говоря более широко, XSS, по его природе, не то, что вы можете защитить против с одним действием. Каждый раз, когда вы берете на себя какой-то пользовательский ввод, вы должны быть особенно осторожны, чтобы подтвердить, что он соответствует формату, в котором вы хотите его видеть. Всякий раз, когда вы представляете этот ввод пользователю, вы должны правильно его обрабатывать, чтобы вредоносный скрипт не выполняется в контексте этого пользователя и делает bad вещами.
OWASP имеет приятный XSS prevention cheatsheet, который является очень приятным ресурсом.
Но, в принципе, всегда избегайте вводимого пользователем ввода в соответствии с областью, в которой он будет отображаться. Если, например, пользователь предоставил некоторый текст для заголовка элемента покупки, то это должно быть только текст и используется в элементе HTML, который ожидает только текст (например, один из элементов), и с экранированным HTML и т. д. С другой стороны, если пользователь предоставил URL-адрес, это должно использоваться в контексте, где URL-адрес действителен (например, источник изображения) и URL-экранирование. Не позволяйте пользователям предоставлять свои собственные HTML, CSS или скрипты. И не ставить пользователем значения в скриптах, CSS и т.д.
Наконец, так как вы используете OpenCart, вы выгоду от нагрузок работы других людей уже сделали. Итак, если вы не делаете что-то необычное и не играете с внутренними битами фреймворка, вы, вероятно, не столкнетесь с глубокими водами. Разумеется, следуйте за конвенциями внутри рамки.