PHP 安全函数:strip_tags、filter_var、Md5 和 sha1
潜在的安全威胁
基本上有两组人可以攻击你的系统
- 黑客——意图获取未经授权的数据或破坏应用程序
- 用户——他们可能会无意中在表格中输入错误的参数,这可能会对网站或网络应用程序产生负面影响。
以下是我们需要警惕的攻击类型。
SQL注入 – 此类攻击将有害代码附加到 SQL 声明。
这是通过使用用户输入表单或使用变量的 URL 来完成的。
附加的代码注释了 SQL 语句的 WHERE 子句中的条件。附加的代码还可以:
- 插入一个始终为真的条件
- 从表中删除数据
- 更新表中的数据
- 此类攻击通常用于获取对应用程序的未经授权的访问。
跨站脚本 - 这种类型的攻击通常会插入有害代码 Java脚本。这是使用用户输入表单(例如联系我们和评论表单)完成的。这样做是为了;
- 检索敏感信息,例如 Cookie 数据
- 将用户重定向到不同的 URL。
- 其他威胁包括 - PHP 代码注入、Shell 注入、电子邮件注入、脚本源代码泄露等。
PHP 应用程序安全最佳实践
现在让我们看看在开发应用程序时必须考虑的一些 PHP 安全最佳实践。
PHP strip_tags
strip_tags 函数删除 HTML, JavaScript 或字符串中的 PHP 标签。
当我们必须保护我们的应用程序免受跨站点脚本等攻击时,此功能很有用。
让我们考虑一个接受用户评论的应用程序。
<?php $user_input = "Your site rocks"; echo "<h4>My Commenting System</h4>"; echo $user_input; ?>
假设您已将 comments.php 保存在 phptuts 文件夹中,请浏览到 URLhttp://localhost/phptuts/comments.php
假设您收到以下用户输入alert(‘Your site sucks!’);
<?php $user_input = "<script>alert('Your site sucks!');</script>"; echo "<h4>My Commenting System</h4>"; echo $user_input; ?>
浏览到 URL http://localhost/phptuts/comments.php
现在让我们使用 strip_tags 函数保护我们的应用程序免受此类攻击。
<?php $user_input = "<script>alert('Your site sucks!');</script>"; echo strip_tags($user_input); ?>
浏览到 URL http://localhost/phptuts/comments.php
PHP filter_var 函数
filter_var 函数用于验证和清理数据。
验证检查数据是否属于正确类型。对字符串进行数字验证检查会返回错误结果。
清理是指从 绳子.
查看此链接获取完整参考 过滤器变量
该代码用于评论系统。
它使用 filter_var 函数和 FILTER_SANITIZE_STRIPPED 常量来去除标签。
<?php $user_input = "<script>alert('Your site sucks!');</script>"; echo filter_var($user_input, FILTER_SANITIZE_STRIPPED); ?>
输出:
alert('Your site sucks!');
mysqli_real_escape_string 函数该函数用于保护应用程序免受 SQL 注入。
假设我们有以下用于验证用户 ID 和密码的 SQL 语句。
<?php SELECT uid,pwd,role FROM users WHERE uid = 'admin' AND password = 'pass'; ?>
恶意用户可以在用户 ID 文本框中输入以下代码。' OR 1 = 1 — 密码文本框中输入 1234 让我们编写身份验证模块
<?php $uid = "' OR 1 = 1 -- "; $pwd = "1234"; $sql = "SELECT uid,pwd,role FROM users WHERE uid = '$uid' AND password = '$pwd';"; echo $sql; ?>
最终结果将是
SELECT uid,pwd,role FROM users WHERE uid = '' OR 1 = 1 -- ' AND password = '1234';
这里,
- “SELECT * FROM users WHERE user_id = ” 测试用户 ID 是否为空
- “' OR 1 = 1 “ 是一个永远为真的条件
- “--”注释掉测试密码的部分。
上述查询将返回所有用户现在让我们使用 mysqli_real_escape_string 函数来保护我们的登录模块。
<?php $uid = mysqli_real_escape_string("' OR 1 = 1 -- "); $pwd = mysqli_real_escape_string("1234"); $sql = "SELECT uid,pwd,role FROM users WHERE uid = '$uid' AND password = '$pwd';"; echo $sql; ?>
上述代码将输出
SELECT uid,pwd,role FROM users WHERE uid = '\' OR 1 = 1 -- ' AND password = '1234';
备注 第二个单引号已为我们转义,它将被视为用户 ID 的一部分,并且密码将不会被注释。
PHP Md5 和 PHP sha1
Md5 是消息摘要 5 的缩写,sha1 是安全散列算法 1 的缩写。
它们都用于加密字符串。
一旦字符串被加密,解密就非常麻烦。
在数据库中存储密码时,md5 和 sha1 非常有用。
下面的代码展示了md5和sha1的实现
<?php echo "MD5 Hash: " . md5("password"); echo "SHA1 Hash: " . sha1("password"); ?>
假设您已将文件 hashes.php 保存在 phptuts 文件夹中,请浏览到 URL
从上面的哈希值可以看出,如果攻击者获得了数据库的访问权限,他们仍然不知道登录的密码。
总结
- 安全性是指为保护应用程序免受意外和恶意攻击而采取的措施。
- strip_tags 函数用于删除标签,例如来自输入数据
- filter_var 函数验证并清理输入数据
- mysqli_real_escape_string 用于清理 SQL 语句。它会从语句中删除恶意字符
- MD5和SHA1都用于加密密码。