如果插入用户输入而不修改SQL查询,则应用程序容易受到SQL注入的攻击,如下例所示:
$unsafe_variable = $_POST['user_input'];
mysql_query("INSERT INTO `table` (`column`) VALUES ('$unsafe_variable')");
Run Code Online (Sandbox Code Playgroud)
这是因为用户可以输入类似的内容value'); DROP TABLE table;--,查询变为:
INSERT INTO `table` (`column`) VALUES('value'); DROP TABLE table;--')
Run Code Online (Sandbox Code Playgroud)
可以采取哪些措施来防止这种情况发生?
是否有一个catchall函数适用于清理SQL注入和XSS攻击的用户输入,同时仍允许某些类型的html标记?
假设我们有这种形式,用户注入恶意代码的可能部分如下所示
...
<input type=text name=username value=
<?php echo htmlspecialchars($_POST['username']); ?>>
...
Run Code Online (Sandbox Code Playgroud)
我们不能简单地添加标签或javascript:alert(); call,因为value将被解释为一个字符串,而htmlspecialchars会过滤掉<,>,',",所以我们不能用引号关闭这个值.
我们可以使用String.fromCode(.....)来绕过引号,但我仍然无法弹出一个简单的警告框.
有任何想法吗?
我有这个代码清理用户输入名为'username'的变量:
$username_clean = preg_replace( "/[^a-zA-Z0-9_]/", "", $_POST['username'] );
if (!strlen($username_clean)){
die("username is blank!");
Run Code Online (Sandbox Code Playgroud)
我想对此页面上的每个输入执行相同的过程,但我有大约12个不同的输入,因为它是一个注册表单.是否有更简单的方法来清理和检查每个输入,而不是在每个输入上应用preg_replace()和if语句?
对此非常陌生,我目前正在尝试为我的网站创建一个登录系统。我创建了一个 html 登录表单,我计划用于用户创建帐户。我创建了一个 php 页面,其中包含连接到服务器的代码,如下所示。
当我填写表格时,我没有得到任何输出。我不确定 php 代码是否在错误的地方(它是一个单独的文件)或者没有输出。提交表单时,当我在测试时手动提交时,数据库似乎没有改变。
我的最终目标是能够将用户添加到我的数据库中名为 users 的表中。
这是我的登录表单代码:
<body>
<h2>Sign Up</h2>
<p></p>
<form action="Create_User.php" method="post">
<div class="imgcontainer">
<img src="http://fc05.deviantart.net/fs70/f/2012/361/1/6/albert_einstein_by_zuzahin-d5pcbug.jpg" alt="Einstein the lad" class="img" />
</div>
<div class="container">
<label><b>Username</b></label>
<input type="text" placeholder="Please Enter your desired Username" name="username" required />
<label><b>Password</b></label>
<input type="password" placeholder="Please Enter Your Desired Password" name="password" required />
<label><b>Email Address</b></label>
<input type="email" placeholder="Please Enter Your Email Address" name="email" required />
<label><b>Date Of Birth</b></label>
<input type="date" name="date_of_birth" required />
<label><b>First Name</b></label>
<input type="text" placeholder="Please Enter your …Run Code Online (Sandbox Code Playgroud) php ×5
security ×3
mysql ×2
xss ×2
forms ×1
html ×1
sanitization ×1
sql ×1
user-input ×1
whitelist ×1