【问题标题】:Unexpected character in input: ''' (ASCII=39)输入中的意外字符:''' (ASCII=39)
【发布时间】:2013-09-14 17:46:33
【问题描述】:

我有以下代码:

<?php
header( 'Content-type: text/xml' );
mysql_connect( 'domain', 'user', 'password' );
mysql_select_db( 'database' );

mysql_query("   INSERT INTO user(userName,password,email)
                VALUES(

                    '".$_POST['username']."',
                    '".md5($pass)."',
                    '".$_POST['email']."',          
 )" );
?>

当我尝试在 url 中加载它时:

http://xcode.domain.de/add.php?userName=test&password=test

我的服务器出现此错误:

警告:输入中的意外字符:''' (ASCII=39) state=1 in /kunden//webseiten/xcode/add.php 第 15 行

解析错误:语法错误,第 15 行 /kunden/webseiten/xcode/add.php 中的意外 '"'

有人可以帮忙吗?

谢谢

【问题讨论】:

  • 这就像教科书中的脚本注入漏洞示例。
  • 你到底是什么意思?
  • 您的变量似乎来自 URI QUERY_STRING,在 PHP 中填充到 $_GET,而不是 $_POST。 @crush 意味着您在尝试将值插入数据库之前不清理输入。因此,如果我将用户名设为 Milo';DROP TABLE user--,那么您可能会遇到麻烦。

标签: php mysql sql


【解决方案1】:

ASCII 39(十进制)是一个撇号。

我看到的错误是“电子邮件”行之后的一个额外的逗号。试试这个:

                '".$_POST['username']."',
                '".md5($pass)."',
                '".$_POST['email']."'         

【讨论】:

  • 不起作用 我的 sql 表如下所示: id bigint(20) added timestamp ON UPDATE CURRENT_TIMESTAMP userName varchar(64) utf8_unicode_ci password varchar(32) utf8_unicode_ci email varchar(20) utf8_unicode_ci 这里有问题?我认为不是,我必须如何将电子邮件地址放在 URL 中? “@”有问题吗?
  • 很抱歉格式不好..我怎么能在这里附加一些东西..会更容易...:)
  • 好的,他添加了时间戳、ID 和始终相同的密码,但没有添加电子邮件地址或用户名。网址对吗? add.php?userName=test2&password=test2&email=test2@de.de
猜你喜欢
  • 2013-06-13
  • 2014-07-23
  • 2015-12-24
  • 2019-01-05
  • 2011-12-11
  • 2012-10-18
  • 2019-04-20
  • 2015-03-28
相关资源
最近更新 更多