Php 验证我的脚本的Url
我很困惑如何正确验证我的URL。我试过几种选择,但都做不好。有人能看看我的代码,告诉我我做错了什么吗Php 验证我的脚本的Url,php,forms,validation,url,Php,Forms,Validation,Url,我很困惑如何正确验证我的URL。我试过几种选择,但都做不好。有人能看看我的代码,告诉我我做错了什么吗 $url=filter_input(INPUT_GET, 'url', FILTER_VALIDATE_URL); if (!$url) { echo The url address is not valid } if(strpos($url,'http://')===false) $url='http://'.$url; $query="INSERT INTO `aa_aa
$url=filter_input(INPUT_GET, 'url', FILTER_VALIDATE_URL);
if (!$url) {
echo The url address is not valid
}
if(strpos($url,'http://')===false)
$url='http://'.$url;
$query="INSERT INTO `aa_aa`.`article` VALUES ('', '".$url."', '".$_POST['description']."', '".$_POST['type']."',NOW());";
$result=mysql_query($query);
if(!$result)
// echo 'Error While Inserting Article!';
echo $query;
else
header('Location: http://aa.aa');
编辑
对不起,埃里克,给你@Brad我的朋友帮我做了所有的脚本,所以我不太明白我使用这个的风险
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
--
-- Database:
--
-- --------------------------------------------------------
-- Table structure for table `article`
--
CREATE TABLE IF NOT EXISTS `article` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`url` varchar(100) NOT NULL,
`description` text NOT NULL,
`type` varchar(40) NOT NULL,
`title` varchar(80) NOT NULL,
`time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `id` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=137 ;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
我不知道这是否是您的错误,但根据您的表布局,您需要更改sql查询
"INSERT INTO `aa_aa`.`article` VALUES ('', '".$url."', '".$_POST['description']."', '".$_POST['type']."',NOW());"
到
请注意,我编写了$\u POST['title']
,因为它在原始查询中丢失,但出现在表创建脚本中。此外,您还必须使用mysql\u real\u escape\u string
来实现一定程度的安全性。理想情况下,您希望使用PDO。以下几点:
$url=filter_input(INPUT_GET, 'url', FILTER_VALIDATE_URL);
这是极好的。使用filter\u input()
是最佳实践
if (!$url) {
echo The url address is not valid
}
这个钻头有几个问题:
$foo===FALSE而不是的习惯$foo
当您专门检查值FALSE
时,除非所检查的值保证为布尔值。在这种特殊情况下,我不相信有任何有效的URL可以强制为布尔值FALSE
,因此您可能是安全的,但养成这种习惯还是好的
exit在echo
之后执行code>,或者重新构造逻辑,以使错误条件实际上可以防止添加无效URL和继续执行脚本
if(strpos($url,'http://')==false)
$url='http://'.$url
{}
FILTER\u VALIDATE\u URL
不会验证没有方案的URL。这意味着此代码是多余的,应该删除,因为任何通过过滤器\u input()
调用的URL都保证有一个方案(例如http://
)http://
,您没有考虑使用其他方案的URL,例如https://
。不过,这并不是什么大问题,因为正如我在上面指出的,由于FILTER\u VALIDATE\u URL
为您解决了所有问题,所以无论如何都应该删除这个代码块
$query=“插入aa_-aa
文章
值(''''.''.$url'.','.'.'.'.'.''.'.'.'.'.'.'.'.'.''.'.'.'.'.'.'.''.'.'.''.'.''.'.'.''.'.'.''.'.'.'Mysql
扩展,所以这是不可能的,最好的选择是使用
Mysql
扩展已被弃用。你应该使用or
同样,始终在代码块周围使用大括号
{}
。您对SQL注入非常开放。如果你还没有被黑客攻击过,你会被黑客攻击的。学习将准备好的查询与PDO或类似工具一起使用,以完全避免此问题。能否提供表布局/创建脚本?@TylinJumfit。。不是html,我想知道你的mysql表是什么样子。。。请编辑您的问题,而不是在评论中添加额外的信息。好吧,Erik,对此表示抱歉。没有,但我更担心这个安全问题。也许我应该付钱给某人重写所有内容,而不是去找我的朋友。是的,看起来你的朋友要么不知道他们提供给你的代码的安全含义,要么他们希望你的网站被公开。
if (!$url) {
echo The url address is not valid
}
$result=mysql_query($query);
if(!$result)
// echo 'Error While Inserting Article!';
echo $query;
else
header('Location: http://aa.aa');