我在PHP书中读到,当我们处理用户输入的数据时,使用htmlspecialchars和mysqli_real_escape_string处理条件是一个好习惯.这两者之间的主要区别是什么,它们适合使用?请指导我.
因此,我的网站成员可以发布主题,回复,评论,编辑它们等.我总是使用htmlspecialchars和addslashes输入html来保护我的网站免受XSS和SQL注入攻击.这还不够,还是有什么我想念的?
谢谢.
我正在尝试将我站点上的textarea中的文本添加到MySQL数据库中.
下面是将文本添加到数据库的PHP代码.
if (isset($_POST['text']))
{
$text = sanitizeString($_POST['text']);
$text = preg_replace('/\s\s+/', ' ', $text);
$query = "SELECT * FROM profiles WHERE user='$user'";
if (mysql_num_rows(queryMysql($query)))
{
queryMysql("UPDATE profiles SET text='$text' where user='$user'");
}
else
{
$query = "INSERT INTO profiles VALUES('$user', '$text')";
queryMysql($query);
}
}
else
{
$query = "SELECT * FROM profiles WHERE user='$user'";
$result = queryMysql($query);
if (mysql_num_rows($result))
{
$row = mysql_fetch_row($result);
$text = stripslashes($row[1]);
}
else $text = "";
}
$text = stripslashes(preg_replace('/\s\s+/', ' ', $text));
Run Code Online (Sandbox Code Playgroud)
以下是表单的代码.
<textarea …Run Code Online (Sandbox Code Playgroud) 我有一个有很多领域的表格......
该动作设置为查询mysql的php页面...
我应该对mysql_real_escape_string每个变量进行消毒吗?或者我可以忽略清理丢弃列表和无线电吗?
此外,除此之外mysql_real_escape_string,我还应该做些什么来防止攻击?
谢谢
我正在使用ADOdb连接到我的MSSQL数据库.我想知道这是否足以阻止SQL注入?
我正在使用的准备好的查询是:
$db = ADONewConnection('odbc_mssql');
$dsn = "Driver={SQL Server};Server=SERVNAME;Database=DBNAME;";
$ADODB_COUNTRECS = false;
$db->Connect($dsn,'LOGIN','PASS');
$sql = 'SELECT login, etc FROM users WHERE login ='.$db->Param('0').' AND pass ='.$db->Param('1').'';
$stmt = $db->Prepare($sql);
$stmt = $db->Execute($stmt,array("$user_id","$psw"));
Run Code Online (Sandbox Code Playgroud)
或者您可能会建议切换到PDO?
我正在阅读网络安全性,一个明显的主题是SQL注入.我正在尝试建立一个基本的php页面,我可以在其中执行sql注入(它是一个本地服务器).但是,似乎我的代码(或服务器)自动转义单引号.这是一个新标准还是我的服务器上激活了一个我不知道的设置?是否需要清理输入?
这是我的服务器端代码的示例:
$foo = $_POST['foo'];
$sql = "SELECT * FROM bar WHERE foo='" . $foo . "'";
connectoTo("database");
query($sql);
Run Code Online (Sandbox Code Playgroud)
其中connectTo()连接到数据库服务器并选择数据库,query()是执行查询时使用的常用过程.什么都没有清洁.但是,当我发送时
$_POST['foo'] = "' OR 1=1 #"
Run Code Online (Sandbox Code Playgroud)
php页面收到这个
$_POST['foo'] = "\' OR 1=1 #"
Run Code Online (Sandbox Code Playgroud)
所以foo已经逃脱了?这与$ _GET相同.
有什么想法吗?我们不再需要清理用户输入了吗?
干杯
埃里克
不久前我已经开始进行Web开发了.我现在知道一些事情,但我真的很担心可能出现的安全问题.我知道像preg_replace这样的简单安全解决方案,但我对此并不自信.
因此,我想问你任何可以在以下情况下应用的"通用"安全标准.正如我所提到的,我不是专业人士,所以如果你能从一些简单但有用的东西开始,那将会很棒.如果可能,请提供示例吗?
我确实看过php手册,虽然我想知道人的其他信息.
以下是我在项目中使用的一些典型的MySQL/PHP内容.您能否提出任何改进措施以使其更安全?
$sql = mysql_query("SELECT * FROM stories WHERE showing = 1 ORDER BY cr_date DESC LIMIT 5") or die (mysql_error("There was an error in connection"));
while($row = mysql_fetch_assoc($sql)){
$story_id = $row["id"];
// etc...
}
Run Code Online (Sandbox Code Playgroud)
$username = $_POST['username'];
$sql = mysql_query("INSERT INTO myMembers (username, //etc... )
VALUES('$username' //etc.. ")or die (mysql_error());
Run Code Online (Sandbox Code Playgroud)
$username = $_GET['username'];
//gets username from url like http://myweb.com/profile.php?username=blabla
Run Code Online (Sandbox Code Playgroud) 我已让用户输入一些信息(姓名,出生日期等)。然后,我必须将这些值插入数据库。我是否应该使用mysql_real_escape_string()防止mysql注入和htmlspecialchars()处理html标记的方式,它们都是必需的还是其中之一?
如果我只使用其中之一,那么哪一个呢?如果我要同时使用,那么哪个先哪个,最后一个哪个?
我有一个页面来激活用户点击我发送的电子邮件中的激活链接,该电子邮件包含一个使用GET方法发布电子邮件地址的网址,我的代码如下,但我要求的是这是一个安全的方法或者是有什么方法可以改进吗?谢谢
$username = $_GET['email'];
mysql_query("UPDATE users SET active = 'yes'
WHERE email = '$username'") or die('oops!');
echo "<meta http-equiv=\"refresh\" content=\"0;URL=/index.php?msg=active\">";
Run Code Online (Sandbox Code Playgroud) 我是CodeIgniter的新手,但不是PHP新手,我想知道我需要在CodeIgniter中做些什么才能使我的所有查询都安全.
通常情况下,我只是用mysql_real_escape_string()在查询(标准PHP)中使用的每个变量,但我看了笨,这里笔者没有逃脱变量的教程,只是做了一个标准的插入类似如下:
$this->db->query("SELECT * FROM Users WHERE Username = ?", array($username));
Run Code Online (Sandbox Code Playgroud)
哪种方式是正确的?
我已经读过它足够甚至建议在输出上转义字符,而不是输入.
它可以很容易地应用于所有get变量,因为它们不会从表单级别注入数据库.
但是,我不确定如何处理所有后期变量.如果它不是来自数据库,那么如果它是原始输入数据,则完全需要转义.但我正在使用PDO prepare/execute来逃避所有变量.现在问题:
最重要的是 - 所有这些,PDO准备/执行,以及htmlspecialchars(),足以防止所有XSS攻击?或者我也应该做更多?如果是这样,那应该是什么?从输入中删除所有html标签?使用BB-Code代替?
有这样的东西真的很有用吗:
$passe = mysql_real_escape_string(htmlspecialchars($_POST['passe']));
Run Code Online (Sandbox Code Playgroud)
为什么我们用这个?如何优化呢?
谢谢
<?php
mysql_connect("localhost", "root", "");
mysql_select_db("nom_db");
$passe = mysql_real_escape_string(htmlspecialchars($_POST['passe']));
$passe2 = mysql_real_escape_string(htmlspecialchars($_POST['passe2']));
if($passe == $passe2)
{
script here
}
else
{
echo 'Your password is wrong';
}
?>
Run Code Online (Sandbox Code Playgroud)