当前位置:首页 > 黑客技术 > 正文内容

php SQL 防注入的一些经历

访客4年前 (2021-04-15)黑客技术518

 发生原因

一方面自己没这方面的认识,有些数据没有通过严厉的验证,然后直接拼接 SQL 去查询。导致缝隙发生,比方:
 
$id  = $_GET['id'];
$sql = "SELECT name FROM users WHERE id = $id";
由于没有对 $_GET['id'] 做数据类型验证,注入者可提交任何类型的数据,比方 " and 1= 1 or " 等不安全的数据。假如依照下面方法写,就安全一些。
 
$id  = intval($_GET['id']);
$sql = "SELECT name FROM users WHERE id = $id";
把 id 转化成 int 类型,就能够去掉不安全的东西。
 
验证数据
避免注入的第一步便是验证数据,能够依据相应类型进行严厉的验证。比方 int 类型直接同过 intval 进行转化就行:
 
$id =intval( $_GET['id']);
字符处理起来比较杂乱些,首要通过 sprintf 函数格局话输出,保证它是一个字符串。然后通过一些安全函数去掉一些不合法的字符,比方:
 
$str = addslashes(sprintf("%s",$str)); 
//也能够用 mysqli_real_escape_string 函数代替addslashes
这样处理今后会比较安全。当然还能够进一步去判别字符串长度,去避免「缓冲区溢出进犯」比方:
 
$str = addslashes(sprintf("%s",$str)); 
$str = substr($str,0,40); //最大长度为40
参数化绑定
参数化绑定,避免 SQL 注入的又一道屏障。php MySQLi 和 PDO 均供给这样的功用。比方 MySQLi 能够这样去查询:
 
 
$mysqli = new mysqli('localhost', 'my_user', 'my_password', 'world');
$stmt = $mysqli->prepare("INSERT INTO CountryLanguage VALUES (?, ?, ?, ?)");
$code = 'DEU';
$language = 'Bavarian';
$official = "F";
$percent = 11.2;
$stmt->bind_param('sssd', $code, $language, $official, $percent);
仿制代码
PDO 的更是便利,比方:
 
 
/* Execute a prepared statement by passing an array of values */
$sql = 'SELECT name, colour, calories
    FROM fruit
    WHERE calories < :calories AND colour = :colour'; $sth = $dbh->prepare($sql, array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY));
$sth->execute(array(':calories' => 150, ':colour' => 'red'));
$red = $sth->fetchAll();
$sth->execute(array(':calories' => 175, ':colour' => 'yellow'));
$yellow = $sth->fetchAll();
 
咱们大都运用 php 的结构进行编程,所以最好不要自己拼写 SQL,依照结构给定参数绑定进行查询。遇到较为杂乱的 SQL 句子,必定要自己拼写的时分,必定要注意严厉的判别。没有用 PDO 或许 MySQLi 也能够自己写个 prepared,比方 wordprss db 查询句子,能够看出也是通过严厉的类型验证。
 
 
function prepare( $query, $args ) {
    if ( is_null( $query ) )
         return;
 
    // This is not meant to be foolproof -- 
           but it will catch obviously incorrect usage.
    if ( strpos( $query, '%' ) === false ) {
         _doing_it_wrong( 'wpdb::prepare' , 
         sprintf ( __( 'The query argument of %s
                 must have a placeholder.' ), 'wpdb::prepare()' ), '3.9' );
   }
 
    $args = func_get_args();
    array_shift( $args );
    // If args were passed as an array (as in vsprintf), move them up
    if ( isset( $args[ 0] ) && is_array( $args[0]) )
         $args = $args [0];
    $query = str_replace( "'%s'", '%s' , $query ); 
        // in case someone mistakenly already singlequoted it
    $query = str_replace( '"%s"', '%s' , $query ); 
        // doublequote unquoting
    $query = preg_replace( '|(?<!%)%f|' , '%F' , $query ); 
        // Force floats to be locale unaware
    $query = preg_replace( '|(?<!%)%s|', "'%s'" , $query ); 
        // quote the strings, avoiding escaped strings like %%s
    array_walk( $args, array( $this, 'escape_by_ref' ) );
    return @ vsprintf( $query, $args );
}
 
总结
安全性很重要,也能够看出一个人根本功,项目缝隙百出,扩展性和可维护性再好也没有用。平常多留心,建立安全认识,养成一种习气,一些根本的安全当然也不会占用用 coding 的时刻。养成这个习气,即便在项目急,时刻短的状况一下,仍然能够做的质量很高。不要比及自己今后担任的东西,数据库都被拿走了,形成丢失才注重。共勉!

扫描二维码推送至手机访问。

版权声明:本文由黑客接单发布,如需转载请注明出处。

本文链接:http://therlest.com/106592.html

分享给朋友:

“php SQL 防注入的一些经历” 的相关文章

天猫双十一购物津贴使用规则

每年的双十一玩法都有更新,玩法是越来越多,但仍保留了一些经典玩法,比如购物津贴。那么购物津贴是什么意思呢?天猫双十一购物津贴使用规则是什么?双十一购物津贴可以与哪些优惠叠加?双11购物津贴面值多少元?一起来了解一下吧!    ...

华流年京东618怎么买便宜

京东618活动已经在火热进行中的哦,各位有买什么东西了吗?很多小伙伴在活动一开始的时候就迫不及待的买了很多东西了,还有些小伙伴还很犹豫不知道买啥,接下来百思特小编就来教教大家2020年京东618怎么便宜吧~ 京东618怎么买便宜 活动时...

美团暗语「美团暗语2021」

 昨天,很多网友问小编美团暗语最好的方法是什么?有关美团暗语2021最好的方法是哪种?最新美团暗语2020?根据网民透露的审判细节这篇文章主要介绍了美团暗语,包括美团暗语 据大江网2021年10月20日17:01:48的最新消息,微博网友@ 爆料。 平安夜来临之际,事件,在网上炒得沸沸扬扬,引发全...

接单的黑客_可以找黑客黑美团吗

有在网络安全范畴中,猜测网络违法和歹意软件发展趋势好像现已成为了各大网络安全公司的传统了。 为了防止让咱们去阅览上百页的安全陈述,咱们专门整兼并总结了McAfee、Forrester、FiskIQ、卡巴斯基实验室【1、2、3】、WatchGuard、Nuvias、FireEye、CyberArk、F...

黑客了解,中国黑客越南网络apt,黑客网站密码破解工具

6.42 · hxxp[://]offlineearthquake[.]com/file//?id=&n=000 进程三:使命履行及实时数据剖析10.61 2019年6月19日,FireEye Endpoint Security设备上收到了缝隙检测警报。 违规应用程序被辨认为Microso...

宏观经济学价格效应 「经济学传递效应」

饮水机效应,价格效应可分解为替代效应和收入效应。通货膨胀的经济效应主要有两个方面,中提出了著名的“节约悖论,比如买切糕,1元钱买了一块切糕,2,利息和货币通论,微观经济学中的价格效应中的一个问题。 “挤出”效应,政府购买和转移支付对我们经济的影响,加剧了收入分配的不均等化进一步加剧。微观经济学,即不...

评论列表

青迟僚兮
2年前 (2022-07-08)

int 类型,就能够去掉不安全的东西。 验证数据避免注入的第一步便是验证数据,能够依据相应类型进行严厉的验证。比方 int 类型直接同过 intval 进行转化就行: $id =intval(

丑味邮友
2年前 (2022-07-08)

安全一些。 $id  = intval($_GET['id']);$sql = "SELECT name FROM users WHERE id = $id";把 id 转化成 int 类型,就能够去掉

蓝殇喜余
2年前 (2022-07-08)

ery = preg_replace( '|(?<!%)%s|', "'%s'" , $query );         // quote the strings, avoidi

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。