审计impossible难度的代码,说明其中函数的作用

文章描述了一个PHP脚本,用于验证用户输入的IP地址是否有效,并利用白名单策略,同时使用CSRFtoken防止请求伪造。它还展示了如何使用explode函数处理IP地址和在不同操作系统上执行ping命令。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 Impossible

这题不再使用黑名单过滤而是使用了白名单。

<?php

if( isset( $_POST[ 'Submit' ]  ) ) {
    // Check Anti-CSRF token
    checkToken( $_REQUEST[ 'user_token' ], $_SESSION[ 'session_token' ], 'index.php' );

    // Get input
    $target = $_REQUEST[ 'ip' ];
    $target = stripslashes( $target );

    // Split the IP into 4 octects
    $octet = explode( ".", $target );

    // Check IF each octet is an integer
    if( ( is_numeric( $octet[0] ) ) && ( is_numeric( $octet[1] ) ) && ( is_numeric( $octet[2] ) ) && ( is_numeric( $octet[3] ) ) && ( sizeof( $octet ) == 4 ) ) {
        // If all 4 octets are int's put the IP back together.
        $target = $octet[0] . '.' . $octet[1] . '.' . $octet[2] . '.' . $octet[3];

        // Determine OS and execute the ping command.
        if( stristr( php_uname( 's' ), 'Windows NT' ) ) {
            // Windows
            $cmd = shell_exec( 'ping  ' . $target );
        }
        else {
            // *nix
            $cmd = shell_exec( 'ping  -c 4 ' . $target );
        }

        // Feedback for the end user
        echo "<pre>{$cmd}</pre>";
    }
    else {
        // Ops. Let the user name theres a mistake
        echo '<pre>ERROR: You have entered an invalid IP.</pre>';
    }
}

// Generate Anti-CSRF token
generateSessionToken();

?> 

checktoken函数:主要是进行一个token验证,可以防止请求伪造。

explode函数:使用字符串对另一个字符串进行分割,并且以数组形式返回。这里演示的是以 ' . ' 作为分割符将2023.6.9进行了分割,并返回成数组。

在C语言中,判断三个点是否能构成三角形并计算其周长和面积通常需要先验证这三个点是否满足构成三角形的条件(任意两边之和大于第三边),然后才能进行后续的计算。以下是一个简单的示例代码,它首先检查输入的点能否构成三角形,然后计算周长和面积(这里假设每个点由x和y坐标的二维数组表示): ```c #include <stdio.h> #include <math.h> // 函数用于计算两点之间的距离 double distance(int x1[], int y1[], int x2[], int y2[]) { return sqrt(pow(x2[0] - x1[0], 2) + pow(y2[0] - y1[0], 2)); } // 判断三点是否构成三角形 int isTriangle(int point1[][2], int point2[][2], int point3[][2]) { double side1 = distance(point1, point2); double side2 = distance(point2, point3); double side3 = distance(point3, point1); if (side1 + side2 > side3 && side1 + side3 > side2 && side2 + side3 > side1) return 1; else return 0; } // 计算三角形的周长 double trianglePerimeter(int point1[][2], int point2[][2], int point3[][2]) { double side1 = distance(point1, point2); double side2 = distance(point2, point3); double side3 = distance(point1, point3); return side1 + side2 + side3; } // 计算三角形的面积(海伦公式) double triangleArea(int point1[][2], int point2[][2], int point3[][2]) { double a = distance(point1, point2); double b = distance(point2, point3); double c = distance(point3, point1); double s = (a + b + c) / 2; return sqrt(s * (s - a) * (s - b) * (s - c)); } int main() { int points[][2] = {{0, 0}, {3, 0}, {0, 4}}; // 举例的三个点 int isOk = isTriangle(points, points+1, points+2); // 检查是否能构成三角形 if (isOk) { printf("三角形周长: %.2f\n", trianglePerimeter(points, points+1, points+2)); printf("三角形面积: %.2f\n", triangleArea(points, points+1, points+2)); } else { printf("Impossible\n"); } return 0; } ``` 这个程序首先通过`isTriangle`函数检查是否能构成三角形,如果可以,则计算并输出周长和面积;否则,输出"Impossible"。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值