网络渗透day13-PHP基础1

PHP(Hypertext Preprocessor)是一种流行的服务器端脚本语言,用于开发动态网站和应用程序。下面是PHP的一些基础语法和常见特性:

  1. PHP标记: PHP代码通常包含在<?php?>标记之间。例如:

    <?php
    // PHP代码在这里
    ?>
    
  2. 输出内容: 使用echoprint语句来向浏览器输出内容。

    <?php
    echo "Hello, World!";
    ?>
    
  3. 变量: 在PHP中,变量以$符号开头,后面跟着变量名。

    $name = "John";
    
  4. 数据类型: PHP支持多种数据类型,包括整数(int)、浮点数(float)、字符串(string)、布尔值(boolean)、数组(array)、对象(object)等。

  5. 字符串操作: PHP提供了丰富的字符串操作函数,例如连接字符串、截取字符串、替换字符串等。

    $str1 = "Hello, ";
    $str2 = "World!";
    $result = $str1 . $str2; // 字符串连接
    
  6. 条件语句: 使用ifelseelseif来执行条件分支逻辑。

    $age = 25;
    if ($age < 18) {
        echo "未成年";
    } elseif ($age >= 18 && $age < 65) {
        echo "成年";
    } else {
        echo "老年";
    }
    
  7. 循环语句: 使用forwhiledo...while等来执行循环操作。

    for ($i = 1; $i <= 5; $i++) {
        echo "Iteration $i<br>";
    }
    
  8. 函数: 在PHP中,你可以创建自定义函数来执行特定任务。

    function greet($name) {
        echo "Hello, $name!";
    }
    
    greet("Alice");
    
  9. 超级全局变量: PHP中有一些特殊的全局变量,如$_GET$_POST$_SESSION,用于处理表单数据、会话管理等。

  10. 包含文件: 使用includerequire语句可以在一个PHP文件中包含另一个PHP文件的内容。

    include 'header.php';
    

这只是PHP的基础语法和特性的简要概述。PHP拥有强大的标准库和第三方扩展,可用于开发各种类型的Web应用程序。如果需要更深入的学习,可以查阅PHP的官方文档或参考在线教程和书籍。

当你深入学习PHP时,还有一些重要的概念和特性需要了解:

  1. 数组: PHP支持索引数组和关联数组。索引数组使用数字索引,而关联数组使用自定义键名。

    $fruits = array("apple", "banana", "cherry");
    $person = array("first_name" => "John", "last_name" => "Doe");
    
  2. 类与对象: PHP支持面向对象编程(OOP)。你可以创建类和对象,封装数据和行为,并使用继承和多态等概念。

    class Car {
        public $color;
        public function start() {
            echo "Engine started!";
        }
    }
    
    $myCar = new Car();
    $myCar->color = "blue";
    
  3. 异常处理: PHP允许你使用trycatchthrow语句来捕获和处理异常。

    try {
        // 一些可能引发异常的代码
    } catch (Exception $e) {
        echo "Caught an exception: " . $e->getMessage();
    }
    
  4. 文件操作: PHP提供了一组用于读取和写入文件的函数。你可以打开、读取、写入、关闭文件,以及检查文件状态。

    $file = fopen("example.txt", "r");
    $content = fread($file, filesize("example.txt"));
    fclose($file);
    
  5. 数据库连接: PHP支持多种数据库连接,例如MySQL、SQLite、PostgreSQL等。你可以执行查询、插入和更新数据库中的数据。

    $conn = new mysqli("localhost", "username", "password", "database");
    $result = $conn->query("SELECT * FROM users");
    
  6. 会话管理: PHP允许你创建和管理用户会话,以跟踪用户状态和存储数据。

    session_start();
    $_SESSION['user_id'] = 123;
    
  7. 安全性: PHP中需要注意安全性问题,包括数据验证、SQL注入、跨站脚本攻击(XSS)等。

  8. 自动加载: PHP支持自动加载类,这样你不必手动包含每个类文件。

    spl_autoload_register(function ($class_name) {
        include $class_name . '.class.php';
    });
    
  9. 命名空间: PHP使用命名空间来组织和避免类名冲突。

    namespace MyNamespace;
    
  10. Composer: Composer是PHP的依赖管理工具,允许你轻松引入和管理第三方库。

这些都是PHP的高级主题,它们可以帮助你更好地组织和维护大型Web应用程序。学习PHP的最佳方法是通过实际编码和项目经验,不断提高你的技能。同时,参考PHP官方文档和社区资源将对你有所帮助。

a:3:{s:4:“name”;s:4:“John”;s:3:“age”;i:30;s:4:“city”;s:8:“New York”;}

在这个序列化字符串 a:3:{s:4:"name";s:4:"John";s:3:"age";i:30;s:4:"city";s:8:"New York";} 中,每个数字和文本的含义如下:

  1. a:表示这是一个关联数组(associative array)。关联数组是一种以键值对形式存储数据的数据结构,其中每个键都与一个值相关联。

  2. 3:表示这个关联数组包含3个键值对。

  3. s:4:"name":表示第一个键名,它是一个字符串(string)。具体含义如下:

    • s:表示这是一个字符串。
    • 4:表示字符串的长度为4个字符。
    • "name":是键名的字符串值,即键名为 “name”。
  4. s:4:"John":表示第一个键 “name” 对应的值,也是一个字符串。具体含义如下:

    • s:表示这是一个字符串。
    • 4:表示字符串的长度为4个字符。
    • "John":是键 “name” 对应的字符串值,即键 “name” 的值是 “John”。
  5. s:3:"age":表示第二个键名,也是一个字符串。具体含义如下:

    • s:表示这是一个字符串。
    • 3:表示字符串的长度为3个字符。
    • "age":是键名的字符串值,即键名为 “age”。
  6. i:30:表示第二个键 “age” 对应的值,是一个整数(integer)。具体含义如下:

    • i:表示这是一个整数。
    • 30:是键 “age” 对应的整数值,即键 “age” 的值是整数 30。
  7. s:4:"city":表示第三个键名,也是一个字符串。具体含义如下:

    • s:表示这是一个字符串。
    • 4:表示字符串的长度为4个字符。
    • "city":是键名的字符串值,即键名为 “city”。
  8. s:8:"New York":表示第三个键 “city” 对应的值,也是一个字符串。具体含义如下:

    • s:表示这是一个字符串。
    • 8:表示字符串的长度为8个字符。
    • "New York":是键 “city” 对应的字符串值,即键 “city” 的值是 “New York”。

这个序列化字符串描述了一个包含三个键值对的关联数组,其中键名分别为 “name”、“age” 和 “city”,对应的值分别是 “John”、30 和 “New York”。这种序列化格式通常用于将数据保存到文件或在网络上传输。

数据类型(Data Type): 在序列化字符串中,每个元素都有一个标识其数据类型的前缀。常见的数据类型包括:

s:表示字符串(string)。
i:表示整数(integer)。
d:表示浮点数(double)。
b:表示布尔值(boolean)。
a:表示关联数组(associative array)。
O:表示对象(object)。
N:表示空值(null)。
键名(Key Name): 在序列化字符串中,关联数组的键名也被序列化,并以字符串形式存储。键名通常包含在双引号内,例如s:4:“name"表示键名为"name”。

键值的类型(Value Type): 数据类型前缀后面跟着一个冒号,然后是值的长度或其他特定信息,这取决于数据类型。例如,s:4:“John"表示字符串类型,长度为4,值为"John”。对于整数、浮点数等,这个部分会包含相应的值。

8个魔术变量:

PHP 向它运行的任何脚本提供了大量的预定义常量。

不过很多常量都是由不同的扩展库定义的,只有在加载了这些扩展库时才会出现,或者动态加载后,或者在编译时已经包括进去了。

有八个魔术常量它们的值随着它们在代码中的位置改变而改变。

例如 LINE 的值就依赖于它在脚本中所处的行来决定。这些特殊的常量不区分大小写,如下:

LINE
文件中的当前行号。

实例

<?php echo '这是第 " ' . __LINE__ . ' " 行'; ?>

以上实例输出结果为:

这是第 “ 2 ” 行

FILE
文件的完整路径和文件名。如果用在被包含文件中,则返回被包含的文件名。

自 PHP 4.0.2 起,FILE 总是包含一个绝对路径(如果是符号连接,则是解析后的绝对路径),而在此之前的版本有时会包含一个相对路径。

实例:

实例

<?php echo '该文件位于 " ' . __FILE__ . ' " '; ?>

以上实例输出结果为:

该文件位于 “ E:\wamp\www\test\index.php ”

DIR
文件所在的目录。如果用在被包括文件中,则返回被包括的文件所在的目录。

它等价于 dirname(FILE)。除非是根目录,否则目录中名不包括末尾的斜杠。(PHP 5.3.0中新增)

实例

<?php echo '该文件位于 " ' . __DIR__ . ' " '; ?>

以上实例输出结果为:

该文件位于 “ E:\wamp\www\test ”

FUNCTION
函数名称(PHP 4.3.0 新加)。自 PHP 5 起本常量返回该函数被定义时的名字(区分大小写)。在 PHP 4 中该值总是小写字母的。

实例

<?php function test() { echo '函数名为:' . __FUNCTION__ ; } test(); ?>

以上实例输出结果为:

函数名为:test

CLASS
类的名称(PHP 4.3.0 新加)。自 PHP 5 起本常量返回该类被定义时的名字(区分大小写)。

在 PHP 4 中该值总是小写字母的。类名包括其被声明的作用区域(例如 Foo\Bar)。注意自 PHP 5.4 起 CLASS 对 trait 也起作用。当用在 trait 方法中时,CLASS 是调用 trait 方法的类的名字。

实例

<?php class test { function _print() { echo '类名为:' . __CLASS__ . "
"; echo '函数名为:' . __FUNCTION__ ; } } $t = new test(); $t->_print(); ?>

以上实例输出结果为:

类名为:test
函数名为:_print

TRAIT
Trait 的名字(PHP 5.4.0 新加)。自 PHP 5.4.0 起,PHP 实现了代码复用的一个方法,称为 traits。

Trait 名包括其被声明的作用区域(例如 Foo\Bar)。

从基类继承的成员被插入的 SayWorld Trait 中的 MyHelloWorld 方法所覆盖。其行为 MyHelloWorld 类中定义的方法一致。优先顺序是当前类中的方法会覆盖 trait 方法,而 trait 方法又覆盖了基类中的方法。

实例

<?php class Base { public function sayHello() { echo 'Hello '; } } trait SayWorld { public function sayHello() { parent::sayHello(); echo 'World!'; } } class MyHelloWorld extends Base { use SayWorld; } $o = new MyHelloWorld(); $o->sayHello(); ?>

以上例程会输出:

Hello World!

METHOD
类的方法名(PHP 5.0.0 新加)。返回该方法被定义时的名字(区分大小写)。

实例:

实例

<?php function test() { echo '函数名为:' . __METHOD__ ; } test(); ?>

以上实例输出结果为:

函数名为:test

NAMESPACE
当前命名空间的名称(区分大小写)。此常量是在编译时定义的(PHP 5.3.0 新增)。

实例:

实例

<?php namespace MyProject; echo '命名空间为:"', __NAMESPACE__, '"'; // 输出 "MyProject" ?>

以上实例输出结果为:

命名空间为:“MyProject”

#前面提到json是一种相对安全的序列化方法,但是要防止XSS攻击,下面介绍一下XSS。

跨站脚本攻击(Cross-Site Scripting,XSS)是一种常见的网络安全漏洞,它允许攻击者将恶意脚本注入到网页中,然后由受害者的浏览器执行。这些脚本通常是JavaScript,但也可以是其他脚本语言。XSS攻击的主要目标是窃取用户的信息、会话令牌、cookie等敏感数据,或者执行恶意操作,如以用户身份发送恶意请求。

XSS攻击通常分为三种主要类型:

  1. 存储型XSS(Stored XSS): 攻击者将恶意脚本存储在服务器上,例如在数据库中或文件中。然后,当用户访问包含这些恶意脚本的页面时,它们会被加载和执行,从而导致攻击。存储型XSS攻击通常在论坛、留言板、博客评论等地方发生。

  2. 反射型XSS(Reflected XSS): 攻击者将恶意脚本作为参数附加到URL中,当用户点击包含这些参数的恶意链接时,脚本会在受害者的浏览器中执行。反射型XSS攻击通常需要引诱用户点击恶意链接。

  3. DOM型XSS(DOM-based XSS): 这种攻击不涉及服务器。恶意脚本修改页面的DOM结构,从而在用户浏览器中执行。攻击者通常通过修改URL片段或其他页面内容来触发DOM型XSS。

防止XSS攻击的方法包括:

  • 输入验证和过滤: 对于所有用户输入数据,进行严格的验证和过滤,以确保只有合法和可信的数据被接受。

  • 输出编码: 在将用户输入或动态生成的内容插入HTML、JavaScript或其他上下文之前,使用合适的输出编码方式来转义特殊字符,如 <, >, &, 等。

  • 内容安全策略(Content Security Policy,CSP): 配置CSP头,限制哪些域名和资源可以加载到网页中,以减少恶意脚本的执行机会。

  • 使用Web应用程序防火墙(WAF): 使用WAF来检测和阻止已知的XSS攻击模式。

  • 定期更新和漏洞修补: 及时更新应用程序和相关库,以确保已知的XSS漏洞得到修复。

  • 教育和培训: 对开发人员和用户提供有关XSS攻击的培训,以提高安全意识。

  • 严格的会话管理: 使用安全的会话管理实践,确保会话标识不容易受到攻击。

XSS攻击是一种常见但可预防的安全问题。通过合适的安全措施和实践,可以有效地减少XSS攻击的风险。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值