Buenas, lo que te están diciendo (salvo sc0rpio) es incompleto.
Los principales ataques de los que te debes proteger son
SQLi y
XSS, para eso en el archivo con el que te conectas a la base de datos o en un archivo que incluyas en toda tu web puedes añadir esta función:
PHP:
function cleanString($input){
global $mysqli;
$cleanstring = $mysqli->real_escape_string(htmlspecialchars($input, ENT_QUOTES));
return $cleanstring;
}
Y luego, todos los datos que introduzcan los usuarios y/o puedan modificar ($_GET, $_COOKIE, $_POST, $_REQUEST, $_FILE y variables del tipo $_SERVER['HTTP_CLIENT_IP']) los debes pasar por esta función. Por ejemplo:
PHP:
$descripcionproducto = cleanString($_GET['descripcion']);
Para variables que solo van a contener numeros enteros (1, 2, 3, 4...) basta con que pongas delante (int):
PHP:
$id_producto = (int)$_GET['idproducto']; //SI SE INTENTA INTRODUCIR ALGUN QUE NO SEA NUMERICO SE TRANSFORMARÁ EN 0
Después, para
LFIy
RFI simplemente no permitas que el usuario introduzca datos sobre que archivo incluir, por ejemplo:
http://tuweb.com/producto.php?file=edit.php
Eso
NUNCA.
Lo mejor es que lo indiques tu manualmente, o en caso de que necesites que lo introduzca el usuario limitar tu las opciones disponibles:
PHP:
if($_GET['file'] == 'edit'){
include('edit.php');
}elseifif($_GET['file'] == 'add'){
include('add.php');
}else{
die('No se ha encontrado el archivo');
}
Después para CSRF lo único es validar que siempre que se envié un formulario o una petición lo envíe una persona autorizada.
Por ejemplo en un formulario en la admin:
form.php:
PHP:
<?php
if($_SESSION['admin']){
?>
<form>
FORMULARIO
</form>
<?php
}
procesarform.php:
PHP:
<?php
if(!empty($_POST['blabla']){
//PROCESAR FORMULARIO
}
Ese código sería vulnerable, tendrías que comprobar en el procesarform.php que es un admin el que está haciendo la petición:
PHP:
<?php
if(!empty($_POST['blabla'] && $_SESSION['admin']){
//PROCESAR FORMULARIO
}
Debes tener cuidado con eso sobre todo en formularios de cambiar contraseña, formularios de administración, editar perfil etc. que es donde es mas común.
Y eso es lo básico que debes saber para proteger tu código.
Después puede haber mas vulnerabilidades a nivel de servidor en sistemas desactualizados o con 0days pero de eso si tienes un buen host o un buen manager de servidor ellos se encargarán de mantener todo actualizado.
Saludos