在每个请求上添加addslashes和htmlentities

时间:2012-10-11 08:01:52

标签: php xss sql-injection

如何在每个_POST上添加addslashes(htmlentities(...))?

if ( isset ( $_POST ) ):
     foreach ( $_POST as $name => $val ) :
           $_POST[$name] = addslashes(htmlentities($val));
     endforeach;
endif;

这会有效吗?

2 个答案:

答案 0 :(得分:1)

  

这会有用吗?

只有在没有像?name[]=tony&name[]=anthony中那样传递数组时才有效。

你为什么要这样做?如果您这样做是为了保护,您应该只在需要时使用这些功能。

使用mysql_real_escape_string()(甚至更好PDO)而不是addslashes()来确保无法进行SQL注入。例如:

// using mysql_real_escape_string
$sql = "SELECT * FROM user WHERE name = '" . mysql_real_escape_string($name) .  "'";

// using PDO (recommended)
$statement = $pdo->prepare("SELECT * FROM user WHERE name = ?");
$statement->execute(array($name));

使用htmlspecialchars()代替htmlentities()来阻止XSS。例如:

<input type="text" name="<?php echo htmlspecialchars($name) ?>" />

答案 1 :(得分:0)

你是不是在试着这个问题?据我所知,它应该有效。