eregi("<input type=\"hidden\" name=\"__hash__\" value=\"(.*)\" /></form>", $con, $rg); eregi函数已弃用如何替代
时间: 2024-09-20 09:08:37 浏览: 48
`ereg` 函数在 PHP 中已经过时,建议使用更安全和更强大的 `preg_match()` 函数来替换它,因为`eregi`函数在处理大小写敏感性和正则表达式边界匹配上存在一些问题。如果你需要使用正则表达式查找 `<input type="hidden" name="__hash__" value="(.*?)" /></form>` 的值,可以这样做:
```php
preg_match('/<input type="hidden" name="__hash__" value="(.*?)" /></form>/', $con, $matches);
$found_hash = isset($matches[1]) ? $matches[1] : null; // 获取第一个捕获组的内容
// 或者,如果你想保留原始正则表达式的风格,可以使用 preg_replace_callback() 作为替换
$pattern = '/<input type="hidden" name="__hash__" value="(.*?)"/';
$replacement = '';
preg_match_all($pattern, $con, $matches, PREG_PATTERN_ORDER);
$found_hash = array_shift($matches);
相关问题
<?php if( isset( $_GET[ 'Change' ] ) ) { // Checks to see where the request came from if( eregi( $_SERVER[ 'SERVER_NAME' ], $_SERVER[ 'HTTP_REFERER' ] ) ) { // Get input $pass_new = $_GET[ 'password_new' ]; $pass_conf = $_GET[ 'password_conf' ]; // Do the passwords match? if( $pass_new == $pass_conf ) { // They do! $pass_new = mysql_real_escape_string( $pass_new ); $pass_new = md5( $pass_new ); // Update the database $insert = "UPDATE `users` SET password = '$pass_new' WHERE user = '" . dvwaCurrentUser() . "';"; $result = mysql_query( $insert ) or die( '<pre>' . mysql_error() . '</pre>' ); // Feedback for the user $html .= "<pre>Password Changed.</pre>"; } else { // Issue with passwords matching $html .= "<pre>Passwords did not match.</pre>"; } } else { // Didn't come from a trusted source $html .= "<pre>That request didn't look correct.</pre>"; } mysql_close(); } ?>分析存在的漏洞是什么?针对这段代码,需要采取哪些措施来防范该漏洞?
这段代码存在以下漏洞:
1. 使用了被废弃的 eregi 函数,可能会导致正则表达式注入漏洞。
2. 没有对输入进行任何验证或过滤,可能会导致 SQL 注入漏洞。
3. 没有对密码进行任何加密,只是简单地使用了 md5 散列,不足以保障密码的安全性。
为了防范这些漏洞,可以采取以下措施:
1. 使用 preg_match 函数替代 eregi 函数,并使用正则表达式进行输入验证。
2. 使用参数化查询或预处理语句来防止 SQL 注入漏洞。
3. 使用更安全的密码散列算法,如 bcrypt 或 PBKDF2,并添加盐值以增加密码的安全性。
阅读全文