首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >这段php代码安全吗?

这段php代码安全吗?
EN

Stack Overflow用户
提问于 2010-02-25 18:15:39
回答 6查看 287关注 0票数 4

我知道我应该使用预准备语句,但我的下一个项目将是使用预准备语句,我只需要完成这个简单的小应用程序。

所以我的问题是:

下面这段代码安全吗?

我使用了htmlentities和mysql_real_escape_string,因为我认为这是一个安全的选择。

代码语言:javascript
复制
//Image 
$imageInput = $_POST['Image'];
$imageClean = htmlentities($imageInput, ENT_QUOTES, 'UTF-8');



//Inserts values into relevant field and creates a new row.
mysql_query("UPDATE ***** SET image='" . mysql_real_escape_string($imageClean) . "'     WHERE id=" . mysql_real_escape_string($idClean) . "");

要添加$idClean代码,请执行以下操作:

代码语言:javascript
复制
//Id to change
if(ctype_digit($_POST['testimonial']))
{
    $idInput = $_POST['testmonial'];
    $idClean = htmlentities($idInput, ENT_QUTOES, 'UTF-8');
}

谢谢你的帮助。

另外,如果你能提出一些建议,那就太好了。

EN

回答 6

Stack Overflow用户

发布于 2010-02-25 18:23:13

这取决于你的$idClean有多干净。

代码语言:javascript
复制
WHERE id=" . mysql_real_escape_string($idClean) . "

mysql_real_escape_string only prepends backslashes to \x00, \n, \r, \, ', " and \x1a,但这不能阻止攻击者使用

代码语言:javascript
复制
$idClean = "1 OR 1=1 AND POSSIBLY OTHER SQL STATEMENTS"

而不是mysql_real_escape_string,你应该把它转换成一个整型。

票数 4
EN

Stack Overflow用户

发布于 2010-02-25 18:20:17

您应该只在输出点应用实体转义-在数据库插入之前转义数据没有任何价值。也就是说,就mysql_real_escape_string而言,您正在做正确的事情。

除此之外,正如@Piskvor所说,idClean变量有一个潜在的问题。(例如,这是否被转换为int类型?)

您可以使用以下示例:

代码语言:javascript
复制
mysql_real_escape_string(intval($idClean))
票数 3
EN

Stack Overflow用户

发布于 2010-02-25 18:22:15

$idClean从何而来?

另一个$_POST?它应该是一个整数,不是吗?

不要在它上面做html清理,只做$idClean = (int)$_POST['id'];...会“强制”它成为一个整数,“杀死”所有可能的xss/sql注入(我的意思是$idCelan )

一般来说,没有一种最好的方法来清理输入;一切都取决于输入应该包含什么,它将被存储在哪里,以及将来如何使用

编辑:在你对回答的评论之后,我认为$idClean来自一个表单(可能是一个隐藏的输入)。

如果您希望防止恶意使用该表单,我建议您添加另一个带有散列$idclean隐藏字段,然后在进程页面中检查散列,以查看是否有人手动更改了id (如果您还没有这样做)

这通常是用户管理中的一个错误设计,不知道这是否是你的行为。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2333196

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档