A injeção de SQL é, na maioria dos casos, facilmente evitada com o uso de instruções preparadas.
O XSS é mais difícil se você planeja permitir que os usuários publiquem marcação HTML. Você precisa remover todos os
<script>
tags, todas on*
atributos de tags, todos javascript:
urls, e mesmo assim isso provavelmente não é totalmente garantido para tornar o HTML de entrada seguro. Existem bibliotecas como HTMLPurifier
isso pode ajudar, mas contanto que você permita HTML, você corre o risco de deixar algo malicioso passar. Você pode usar uma biblioteca que implemente algo como markdown ou wikitext. Isso limita severamente o que os usuários podem inserir, enquanto ainda permite que eles marquem o conteúdo até certo ponto. Não é totalmente à prova (as pessoas ainda podem postar links para sites maliciosos e esperar que os usuários cliquem neles, o que alguns serão ingênuos o suficiente para realmente fazer), e você não poderá usar um editor rico como o TinyMCE sem algum tipo de plugin, mas é um trabalho muito mais simples limpar markdown do que limpar HTML.