mysql_real_escape_string c api_mysql_real_escape_string c api

感谢您提出有趣的问题。干得好:

它逃脱了危险人物,

您的概念完全错误。 实际上“危险人物”是神话,没有神话。和mysql_real_escape_string转义,但只是一个字符串定界符。从这个定义中,您可以得出它的局限性-仅适用于string。

但是,它仍然容易受到其他攻击的攻击,这些攻击可能包含安全字符,但可能有害于显示数据或在某些情况下恶意修改或删除数据。

您在这里混合了所有内容。 说到数据库,

对于字符串,它不是脆弱的。只要您的字符串被引用和转义,它们就不能 “恶意修改或删除数据”。* 对于其他数据类型data-是的,它没有用。但这不是因为它“不安全”,而是因为使用不当。 至于显示数据,我认为它在与PDO有关的问题中是题外话,因为PDO也与显示数据无关。

转义用户输入

^^^另一个需要注意的错觉!

用户输入与转义绝对无关。从前一个定义中可以了解到,您必须转义字符串,而不是“用户输入”。因此,再次:

您有转义字符串,无论其来源如何 无论源如何,都无法逃脱其他类型的数据。 明白了吗? 现在,我希望您了解转义的局限性以及“危险人物”的误解。

据我了解,使用PDO /预备语句更安全

并不是的。 实际上,我们可以动态添加四个不同的查询部分:

一个字符串 一个号码 标识符 语法关键字。 因此,您可以看到转义仅涵盖一个问题。(但是,当然,如果将数字视为字符串(用引号引起来),则在适用时也可以使其安全)

而准备好的语句涵盖了-嗯-全部2个问题!很大;-)

对于其他两个问题,请参阅我的早期答案:在PHP中,在向数据库提交字符串时,我应该使用htmlspecialchars()还是使用正则表达式来处理非法字符?

现在,函数名称有所不同,因此我的mysql_query,mysql_fetch_array,mysql_num_rows等不再起作用。

那是PHP 用户的另一种严重的幻想,一种自然灾害,一场灾难:

即使使用旧的mysql驱动程序,也永远不要在其代码中使用裸露的API函数!必须将它们放在某种库函数中以供日常使用!(这并不是一个魔术,只是为了使代码更短,更少重复,防错,更一致和可读性更高)。

PDO也是如此!

现在再次提出您的问题。

但是通过使用它们是否可以消除使用mysql_real_escape_string之类的东西的需要?

是。

但是我认为这大致是应该从数据库中获取用户的想法。

不是要获取,而是要向查询添加任何数据!

如果我没记错的话,你必须在PDO:PARAM_STR之后给出一个长度

您可以,但不必。

现在,这一切安全吗?

在数据库安全方面,此代码中没有弱点。没什么要固定的。

为了确保显示安全-只需在该网站上搜索XSS关键字即可。

希望我对此事有所了解。

顺便说一句,对于长插入,您可以使用我有一天写的函数,使用PDO插入/更新帮助器函数

但是,我目前不使用准备好的语句,因为我喜欢使用自制的占位符,而不要使用上面提到的库。因此,要对付下面的riha发布的代码,该代码将短于这两行:

$sql = 'SELECT * FROM users WHERE name=?s AND type=?s AND active=?i'; $data = $db->getRow($sql,$_GET['name'],'admin',1); 但是,当然,您也可以使用准备好的语句使用相同的代码。

(yes I am aware of the Schiflett's scaring tales)来源:stack overflow

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值