小编Moh*_*eri的帖子

为什么mysql_real_escape_string()没有阻止hack?

我今天有一个网站被黑了.服务器日志返回类似黑客的尝试:

www.site.com/notifications.php?PID=7&id=999999.9%20union%20all%20select%20%28select%20distinct%20concat%280x7e%2C0x27%2Cunhex%28Hex%28cast%28schema_name%20as%20char%29%29% 29%2C0x27%2C0x7e%29%20from%20%60information_schema%60.schemata%20limit%201%2C1%29%2C0x31303235343830303536%2C0x31303235343830303536%2C0x31303235343830303536--

但我在我的代码中使用了mysql_real_escape_string():

if (isset($_GET['id']) && $_GET['id'] != '') {
   $id = mysql_real_escape_string($_GET['id']); 
} else {
   $id = '';
}

if ($id == '') {
   $stmt = "SELECT * FROM tbln13 ORDER BY id DESC"; 
} else {
   $stmt = "SELECT * FROM tbln13 WHERE id = $id";
}

$NewsResult = mysql_query($stmt) or die (mysql_error());
Run Code Online (Sandbox Code Playgroud)

为什么我的网站无法阻止此次攻击?

php mysql mysql-real-escape-string code-injection

0
推荐指数
1
解决办法
889
查看次数

将文本中的所有URL替换为PHP中的可单击链接

我有一个用PHP编写的Web应用程序.我想在用户评论中找到所有网址,并将其更改为可点击的链接.我搜索了很多网站和页面,发现下面的解决方案(不幸的是我没有找到它的参考链接):

<?php
function convert($input) {
   $pattern = '@(http)?(s)?(://)?(([a-zA-Z])([-\w]+\.)+([^\s\.]+[^\s]*)+[^,.\s])@';
   return $output = preg_replace($pattern, '<a href="http$2://$4">$0</a>', $input);
}
?>
Run Code Online (Sandbox Code Playgroud)

这段代码完全归功于它的作者.但我发现其中有一个我无法解决的错误.
如果检测到的URL开始小号字母(无HTTPS),该HREF值不会有š性格和HTTP将变更为HTTPS,而内部的文字是正确的.

示例:
source.com >><a href="https://ource.com">source.com</a>

你有解决这个bug的任何解决方案吗?

php regex url preg-replace

0
推荐指数
2
解决办法
2613
查看次数

MySQL 中哪个更快?COUNT(id) 还是计算结果行?

我需要计算 MySQL 中一个巨大表中的总行数。我正在用两种形式的 PHP 和 PDO 编写代码。请告诉我哪个可以更快?使用 COUNT() 函数,还是计算返回的总行数?

方法一:

$sql = "SELECT id FROM tbl_users";
$q = $db->prepare($sql);
$q->execute(array());
$rows = $q->rowCount();
Run Code Online (Sandbox Code Playgroud)

方法二:

$sql = "SELECT COUNT(id) as c FROM tbl_users";
$q = $db->prepare($sql);
$q->execute(array());
$result = $q->fetch();
$rows = $result['c'];  
Run Code Online (Sandbox Code Playgroud)

先感谢您。

mysql select count mariadb

0
推荐指数
1
解决办法
58
查看次数

我们不能在PHP中使用键值的数组上使用数字索引吗?

我使用键值对在PHP中定义了一个数组,如下所示:

$myArray = (
    'item1' => 'val1',
    'item2' => 'val2',
    'item3' => 'val3'
);
Run Code Online (Sandbox Code Playgroud)

但每当我需要使用数字索引使用此数组中的一个存储值时$myArray[1],我得到以下错误:

注意:未定义的偏移量:1 ...

以前我虽然在定义数组成员时总是会创建数字索引,但现在这个错误告诉我我错了.

我的问题是:我们不能在PHP中使用键值对创建的数组上使用数字索引吗?

php arrays indexing key-value offset

-3
推荐指数
1
解决办法
60
查看次数