我已经在php中编写了一些基本的网站和应用程序,但我之前从未真正改编过任何严格的命名标准,除了我如何命名存储MySQL数据库中的数据的变量,在这种情况下我将它命名为与列名完全相同(通常类似于a_column_name)。
我知道区分“不干净”和“干净”变量非常重要,所以我不小心最终允许SQL注入或XSS发生,但我不确定我应该使用什么命名约定
有什么建议吗?
答案 0 :(得分:5)
我认为这不是正确的做法。
首先,变量可以用各种方式编码,比如sql,urls,html,......你也应该编码尽可能接近消费。即输出前的html编码,传递给mysql之前的sql escape ...
当然在sql的情况下,您应该更喜欢使用预处理语句来构建字符串查询。
因此,如果您坚持使用命名约定,则应基于您应用于该变量内容的转义/编码,而不是您未清理的内容。
答案 1 :(得分:2)
你只需要记住逃避价值。
例如,如果您使用mysql
来存储字符串。
使用mysql_real_escape_string()
<?php
// Connect
$link = mysql_connect('mysql_host', 'mysql_user', 'mysql_password')
OR die(mysql_error());
// Query
$query = sprintf("SELECT * FROM users WHERE user='%s' AND password='%s'",
mysql_real_escape_string($user),
mysql_real_escape_string($password));
?>
当你需要在页面中打印一些值时
使用:htmlspecialchars
<?php
$new = htmlspecialchars("<a href='test'>Test</a>", ENT_QUOTES);
echo $new; // <a href='test'>Test</a>
?>