我是php的业余爱好者。我有一个网站,我从数据库加载项目,例如,当我想加载一个项目的网址是这样的
www.mywesite.com/proyecto.php?id=1
我做了一个.htaccess来使用这个url:
www.mywebsite.com/proyecto/id/1
.htaccess访问
<ifModule mod_rewrite.c>
Options +FollowSymLinks
RewriteEngine on
RewriteRule proyecto/id/(.*)/ proyecto.php?id=$1
RewriteRule proyecto/id/(.*) proyecto.php?id=$1
RewriteRule ^([^\.]+)$ $1.php [NC,L]
ErrorDocument 404 /error404.php
</ifModule>
现在的问题是,由于url的变化,变量没有定义。我就是这样得到变量的
$valorid = $_GET['id'];
$connection = new
PDO('mysql:host='.$host.';dbname='.$db_name.';charset=utf8',''.$username.'', ''.$password.'');
foreach($connection->query('SELECT * FROM grafica WHERE id = '.$valorid.'')
as $row) {
}
我就这么定了
<?php echo $row['nombre'] />
希望有人能帮忙。
提前谢谢。
1条答案
按热度按时间wa7juj8i1#
关于你的问题,这里已经回答了:用php重写url
今后,请务必寻找可能的解决方案。请考虑.htaccess文件中的以下内容:
这是创建更安全的get请求的第一步。例如,这将通过:
www.mywebsite.com/proyecto/id/1/
当恶意尝试失败时:www.mywebsite.com/proyecto/id/%5Cxbf%5Cx27%20OR%201%3D1%20%2F*
这会过去的\xbf\x27 OR 1=1 /*
可能对您的脚本有害。由于该值不是0到9,因此不应满足重写条件。转到sql查询。这是下一级防御,我们要确保我们只使用整数变量类型。为此,我们希望以某种方式清理来自浏览器的输入。不止一种方法。我们可以在将变量传递给查询之前完成,也可以使用pdo函数。
示例1:在查询之前调整变量的大小
而不是使用:
无论输入什么
id
将被放置在变量中,我们可以强制它成为一个数字。比如:这是一种不太常用的方法,因为它基本上是将变量格式化为数字。
示例2:使用pdo prepared语句
请参阅:http://php.net/manual/en/pdo.prepared-statements.php
考虑以下几点:
这被认为是一种更好的方法。第一,我们改进了声明
LIMIT 1
确保我们只得到一个结果。第二,pdo将准备声明,并确保所有潜在的有害元素都得到处理、评论或掩盖。准备要由pdostatement::execute()方法执行的sql语句。sql语句可以包含零个或多个命名(:name)或问号(?)参数标记,在执行语句时,实值将被替换。不能在同一sql语句中同时使用命名参数标记和问号参数标记;选择一个或另一个参数样式。使用这些参数绑定任何用户输入,不要将用户输入直接包含在查询中。
希望有帮助。