我从POST方法中获取变量,并使用Joomla 2.5在MySQL上查询它们.
什么是最安全的方法?目前我正在使用带有mysql_real_escape_string的JRequest :: getVar.这是对的吗 ?
带有mysql_real_escape_string的$ _POST
$ password = mysql_real_escape_string($ _ POST ["pwd"]));
带有mysql_real_escape_string的JRequest :: getVar
$ password = mysql_real_escape_string(JRequest :: getVar('pwd','','post'));
JRequest :: getVar
$ password = JRequest :: getVar('pwd','','post');
JInput
$ password = $ jinput-> get('pwd','','STRING');
使用mysql_real_escape_string进行JInput
$ password = mysql_real_escape_string($ jinput-> get('pwd','','STRING'));
或者是其他东西 ?
编辑1:
我找到了另一个使用mysql_real_escape_string转义字符的方法http://docs.joomla.org/API15:JDatabaseMySQL/getEscaped
这是我的查询代码.
$db = JFactory::getDbo();
$query = $db->getQuery(true);
$query->select(array('username', 'password', 'state','name'));
$query->from('#__dbusers');
$query->where('username = \''.$loginUsername.'\' AND password = \''.$loginPassword.'\' AND state > -1');
$db->setQuery($query);
$results = $db->loadObjectList();
Run Code Online (Sandbox Code Playgroud)
编辑2:MySQL的Framework 11.1 escape()方法
public function escape($text, $extra = false)
{
$result = mysql_real_escape_string($text, $this->getConnection());
if ($extra)
{
$result = addcslashes($result, '%_');
}
return $result;
}
Run Code Online (Sandbox Code Playgroud)
因为escape()使用mysql_real_escape_string()使用如下安全吗?
$ loginUsername = mysql_real_escape_string(JRequest :: getVar('user','','post','STRING'));
nib*_*bra 12
在Joomla!中,你永远不会直接访问任何超级全球.此外,您应始终区分传入和传出的数据.因此,要从请求中获取传入值,请使用
$password = $jinput->get('pwd', '', 'STRING');
Run Code Online (Sandbox Code Playgroud)
(JInput是正确的选择; JRequest已弃用,将来会被删除.)现在您可以使用干净的值.它准备用PHP处理.
接下来要在SQL查询中使用该值(传出),您必须正确地转义它.
$query->where("username = " . $db->quote($loginUsername) . " AND password = " . $db->quote($loginPassword) . " AND state > -1");
Run Code Online (Sandbox Code Playgroud)
与之不同的是$db->escape(),$db->quote()添加底层数据库引擎所需的引号.
好吧,你可能在某些时候想要另一种类型的输出,例如.在一个视图中(即使密码不是这个例子的最佳选择,我也用它来保持一致性):
echo $this->escape($password); // applies html_specialchars in HTML views
Run Code Online (Sandbox Code Playgroud)
因此,最好始终尽可能地避开所需的地方.对于传入数据,这在检索之后立即用于在发送/打印之前立即传出数据.
| 归档时间: |
|
| 查看次数: |
9142 次 |
| 最近记录: |