脚本宝典收集整理的这篇文章主要介绍了php – (double)$user_input和bind_param(‘d’,$user_input)之间的安全性差异,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
$qry->PRepare('UPDATE table_name SET column1 = ? string_column = ? WHERE column3 = ? AND column4 = ?'); $qry->bind_param('sbid',$string,$blob,$int,$double); $int = 'non int value'; /* gives 0 in the database */ $blob = 'some string'; $string = 'another string'; $double = $double; $qry->execute(); $qry->close();
我只想说我只想执行一次查询,我只是在安全名称中使用了预处理语句.从我一直在阅读的内容来看,只使用一次准备好的查询会产生更多的开销,这相当于降低了安全性方面的性能.话虽如此 – 一次这样做同样的查询会有什么性能/安全性差异.
$int = (int) $int; $blob = "'" .MysqL_real_escaPE_string($blob) ."'"; $string = "'" .MysqL_real_escape_string($blob) ."'"; $double = (double) $double; $db->query("UPDATE SET column1 = $int,column2 = $blob WHERE column3 = $string AND column4 = $double ");
>如果MysqL服务器存在大量连接,则单次使用预处理语句会产生(超过理论上)性能损失,这会更高. (想一想:上下文切换)
>但是你不应该运行如此接近其极限的数据库服务器,这才会产生影响.
>但你并不总是有选择(想想:共享主机)
要么:
>有一些(甚至很多)案例,其中准备好的语句不提供安全性好处 – 有很多业务逻辑,其中不涉及用户生成的数据(想想:Jointables,只携带ID)或者用户生成的数据必须事先通过其他原因进行验证(思考:价格计算,memcached查找,……)
>但是为每个查询选择多种样式之一会导致代码无法维护.
>但它有时是不可避免的(想一想:IN()构造没有准备好的查询支持)
经常被忽视:
>准备好的查询有时会使与RDBMS无关的内容变得更加困难
>但是准备好的查询提供了针对sql注入的最佳知识保护.
我的最爱:
>通常建议只使用准备好的查询
>但是这个星球上的大多数生物会建议你吃粪便或腐烂的有机物质.
因此,风格的选择通常必须根据具体情况进行.我们采用了封装所有数据库访问的方式,包括标准化库中的参数管理,简单地是require()ed,因此您可以直接替换准备好的查询,转义或任何您想要的和您的RDBMS支持.
以上是脚本宝典为你收集整理的php – (double)$user_input和bind_param(‘d’,$user_input)之间的安全性差异全部内容,希望文章能够帮你解决php – (double)$user_input和bind_param(‘d’,$user_input)之间的安全性差异所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。